使用交叉表的PostgreSQL查询

时间:2018-12-27 08:36:38

标签: postgresql crosstab

现在,我倾向于使用postgreSQL。在研究中,我在postgreSQL中找到了交叉表。我试图将此功能应用于我的自定义表格,但无法正常工作。请帮忙!

这是我的桌子

 year | type     | count 
------+----------+----
 2015 | AS       |  6
 2015 | HY       |  6
 2015 | KR       |  6
 2015 | SE       |  6
 2016 | AS       |  2
 2016 | HY       |  2
 2016 | KR       |  2
 2016 | SE       |  2
 2017 | AS       |  1
 2017 | HY       |  1
 2017 | KR       |  1
 2017 | SE       |  1
 2018 | AS       |  2
 2018 | HY       |  2
 2018 | KR       |  2
 2018 | SE       |  2

我想这样改变这张桌子

year |  AS  |  HY  |  KR  |  SE  |
----------------------------------
2015 |   6  |   6  |   6  |   6  |
2016 |   2  |   2  |   2  |   2  |
2017 |   1  |   1  |   1  |   1  |
2018 |   2  |   2  |   2  |   2  |

要创建该表,我使用交叉表设计了查询,但是不起作用!

请让我知道这个问题的查询。

1 个答案:

答案 0 :(得分:0)

您可以在没有Crosstab的情况下实现此目标,可以使用Aggregate函数。

查询:

select 
  year,
  max(counts) filter (where type = 'AS') as "AS",
  max(counts) filter (where type = 'HY') as "HY",
  max(counts) filter (where type = 'KR') as "KR",
  max(counts) filter (where type = 'SE') as "SE"
from
  tbl
group by
  year
order by 
  year asc 

Demo <> DB Fiddle

如果您尝试学习Crosstab,则此答案非常有用,并且可以很好地解释如何进行枢轴使用Crosstab