标签: crosstab

PostgreSQL交叉表查询

有没有人知道如何在PostgreSQL中创建交叉表查询?
例如,我有下表:

Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5
Run Code Online (Sandbox Code Playgroud)

我想查询返回以下交叉表:

Section    Active    Inactive
A          1         2
B          4         5
Run Code Online (Sandbox Code Playgroud)

这可能吗?

sql postgresql pivot case crosstab

180
推荐指数
4
解决办法
17万
查看次数

MySQL - 行到列

我试图搜索帖子,但我只找到了SQL Server/Access的解决方案.我需要一个MySQL(5.X)的解决方案.

我有一个表(称为历史)有3列:hostid,itemname,itemvalue.
如果我执行select(select * from history),它将返回

   +--------+----------+-----------+
   | hostid | itemname | itemvalue |
   +--------+----------+-----------+
   |   1    |    A     |    10     |
   +--------+----------+-----------+
   |   1    |    B     |     3     |
   +--------+----------+-----------+
   |   2    |    A     |     9     |
   +--------+----------+-----------+
   |   2    |    c     |    40     |
   +--------+----------+-----------+
Run Code Online (Sandbox Code Playgroud)

如何查询数据库以返回类似的内容

   +--------+------+-----+-----+
   | hostid |   A  |  B  |  C  |
   +--------+------+-----+-----+
   |   1    |  10  |  3  |  0  |
   +--------+------+-----+-----+
   |   2    |   9  |  0  |  40 …
Run Code Online (Sandbox Code Playgroud)

mysql sql etl pivot-table crosstab

169
推荐指数
8
解决办法
22万
查看次数

如何用百分比制作熊猫交叉表?

给定具有不同分类变量的数据帧,如何返回具有百分比而不是频率的交叉表?

df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 6,
                   'B' : ['A', 'B', 'C'] * 8,
                   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
                   'D' : np.random.randn(24),
                   'E' : np.random.randn(24)})


pd.crosstab(df.A,df.B)


B       A    B    C
A               
one     4    4    4
three   2    2    2
two     2    2    2
Run Code Online (Sandbox Code Playgroud)

使用交叉表中的边距选项来计算行和列总数让我们足够接近,认为应该可以使用aggfunc或groupby,但是我的微脑无法想到它.

B       A     B    C
A               
one     .33  .33  .33
three   .33  .33  .33
two     .33  .33  .33
Run Code Online (Sandbox Code Playgroud)

python crosstab pandas

47
推荐指数
3
解决办法
5万
查看次数

Postgres - 将行转置为列

我有下表,它为每个用户提供了多个电子邮件地址.

在此输入图像描述

我需要将其展平为用户查询的列.根据创建日期向我提供"最新"3个电子邮件地址.

user.name | user.id | email1          | email2           | email3**

Mary      | 123     | mary@gmail.com  | mary@yahoo.co.uk | mary@test.com

Joe       | 345     | joe@gmail.com   | [NULL]           | [NULL]
Run Code Online (Sandbox Code Playgroud)

sql database postgresql transpose crosstab

38
推荐指数
2
解决办法
9万
查看次数

Groupby值计入数据帧pandas

我有以下数据帧:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])
Run Code Online (Sandbox Code Playgroud)

我把它通过想组idgroup并计算每个词的数量为这个ID,组对.

所以最后我会得到这样的东西:

在此输入图像描述

通过循环遍历所有行df.iterrows()并创建新数据帧,我能够实现我想要的目标,但这显然效率低下.(如果有帮助,我事先知道所有术语的列表,其中有~10个).

看起来我必须分组然后计算值,所以我尝试使用df.groupby(['id', 'group']).value_counts()哪个不起作用,因为value_counts在groupby系列而不是数据帧上运行.

无论如何,我可以实现这一点而不循环?

python crosstab dataframe pandas pandas-groupby

35
推荐指数
5
解决办法
4万
查看次数

使用CASE和GROUP BY进行数据透视的动态替代方法

我有一个看起来像这样的表:

id    feh    bar
1     10     A
2     20     A
3      3     B
4      4     B
5      5     C
6      6     D
7      7     D
8      8     D
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

bar  val1   val2   val3
A     10     20 
B      3      4 
C      5        
D      6      7     8
Run Code Online (Sandbox Code Playgroud)

我有这个查询,它执行此操作:

SELECT bar, 
   MAX(CASE WHEN abc."row" = 1 THEN feh ELSE NULL END) AS "val1",
   MAX(CASE WHEN abc."row" = 2 THEN feh ELSE NULL END) AS "val2",
   MAX(CASE WHEN abc."row" = 3 THEN feh ELSE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql pivot crosstab window-functions

26
推荐指数
4
解决办法
3万
查看次数

为什么我的Crosstab在Excel中被切断了?

我正在尝试使用BIRT创建一个excel电子表格.电子表格是将两个对象映射在一起的交叉表.根据MySQL数据库中的值,行数和列数是动态的.目前,我有一个PDF输出报告的工作实现.现在,我正在尝试为Excel创建第二版报告.

我复制了报表设计并开始调整它以使用Excel.一切看起来都不错,但只有前3列显示在标题之后.所有行都正确显示.

我尝试过以下方法:

  • 我尝试在页面上的每个元素上设置Overflow to Visible.这没有效果.
  • 我尝试将母版页的高度和宽度设置为可笑的大值.所有信息都正确显示,但我希望没有硬编码值的解决方案.将来数据宽度可能会再次超过我的任意值并被切断.

我受到以下方面的限制:

  • 我无法切换报告引擎(我必须使用BIRT).
  • 我无法切换Excel发射器.

这篇博客文章提到了我的问题:http: //www.spudsoft.co.uk/2011/10/the-spudsoft-birt-excel-emitters/ 但它没有提供除发射器开关之外的解决方案.具体的引用是"文件也有页面布局的问题,我无法解决(特别是广泛的报告将被切断)."

除了一篇博客文章,我的googlefu也让我失望了.任何帮助表示赞赏!谢谢!

excel birt overflow crosstab

25
推荐指数
1
解决办法
2571
查看次数

PostgreSQL将列转换为行?移调?

我有一个PostgreSQL函数(或表),它给我以下输出:

Sl.no    username    Designation    salary   etc..
 1        A           XYZ            10000    ...
 2        B           RTS            50000    ...
 3        C           QWE            20000    ...
 4        D           HGD            34343    ...
Run Code Online (Sandbox Code Playgroud)

现在我想要输出如下:

Sl.no            1       2        3       4       ...
 Username        A       B        C       D       ...
 Designation     XYZ     RTS      QWE     HGD     ...
 Salary          10000   50000    20000   34343   ...
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

sql postgresql pivot-table dynamic-sql crosstab

25
推荐指数
4
解决办法
5万
查看次数

我需要知道如何创建交叉表查询

我需要帮助创建以下结果.我想到了一个sql pivot,但我不知道如何使用它.看了几个例子,无法想出解决方案.关于如何实现这一目标的任何其他想法也是受欢迎的.必须动态生成状态列.

有三个表,资产,资产类型,assetstatus

Table: assets
assetid     int
assettag    varchar(25)
assettype   int
assetstatus int

Table: assettypes
id         int
typename   varchar(20)  (ex: Desktop, Laptop, Server, etc.)

Table: assetstatus
id         int
statusname varchar(20)  (ex: Deployed, Inventory, Shipped, etc.)

期望的结果:

AssetType     Total   Deployed   Inventory  Shipped     ...
-----------------------------------------------------------
Desktop         100       75        20          5       ...
Laptop           75       56        19          1       ...
Server           60       50        10          0       ...

一些数据:

assets table:
1,hol1234,1,1
2,hol1233,1,2
3,hol3421,2,3
4,svr1234,3,1

assettypes table:
1,Desktop
2,Laptop
3,Server

assetstatus table:
1,Deployed
2,Inventory
3,Shipped

sql pivot crosstab

24
推荐指数
1
解决办法
6万
查看次数

在PostgreSQL中动态生成交叉表的列

我试图crosstab在PostgreSQL中创建查询,以便它自动生成crosstab列而不是硬编码.我编写了一个函数,可以动态生成我的crosstab查询所需的列列表.我们的想法是crosstab使用动态sql 在查询中替换此函数的结果.

我知道如何在SQL Server中轻松完成这项工作,但我对PostgreSQL的了解有限,阻碍了我在这方面的进展.我正在考虑将生成动态列列表的函数结果存储到变量中,并使用它来动态构建sql查询.如果有人可以指导我这样做会很棒.


-- Table which has be pivoted
CREATE TABLE test_db
(
    kernel_id int,
    key int,
    value int
);

INSERT INTO test_db VALUES
(1,1,99),
(1,2,78),
(2,1,66),
(3,1,44),
(3,2,55),
(3,3,89);


-- This function dynamically returns the list of columns for crosstab
CREATE FUNCTION test() RETURNS TEXT AS '
DECLARE
    key_id int;
    text_op TEXT = '' kernel_id int, '';
BEGIN
    FOR key_id IN SELECT DISTINCT key FROM test_db ORDER BY key LOOP …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql crosstab plpgsql postgresql-9.1

19
推荐指数
2
解决办法
2万
查看次数