首页 > 解决方案 > 使用交叉表的 PostgreSQL 查询

问题描述

现在,我倾向于 postgreSQL。在研究中,我在 postgreSQL 中发现了 crosstab。我尝试将此功能应用于我的自定义表格,但它不起作用。请帮忙!!

这是我的桌子

 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  |

为了制作该表,我使用交叉表设计了查询,但不起作用!

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

标签: postgresqlcrosstab

解决方案


你可以在没有 的情况下实现这一点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 

演示 <> DB Fiddle

如果您尝试学习Crosstab这个答案真的很棒,并且很好地解释了如何使用 pivot Crosstab


推荐阅读