首页 > 解决方案 > 如何将单行分组为一个?

问题描述

再会。我有一个包含列的表:年份、项目、计数。假设我在 db 表中有以下行:

2007 item1 value1
2007 item2 value2
2008 item1 value3
2008 item2 value4
2009 item1 value5
2009 item2 value6

1个查询是否有可能得到这样的结果:

2007 value1 value2
2008 value3 value4
2009 value5 value6

我知道如何分组等等,问题是每年的项目数量可能不同,所以,假设我们总共有 5 个项目,我需要以下输出(如果找不到,添加 0):

2007 value1 value2 0 0      0  
2008 0      value3 0 value4 0 

标签: sqlpostgresqlgroup-bypivotaggregate-functions

解决方案


你似乎想要这些方面的东西:

select year
    coalesce(sum(value) filter(where item = 'item1'), 0) as value1,
    coalesce(sum(value) filter(where item = 'item2'), 0) as value2,
    coalesce(sum(value) filter(where item = 'item3'), 0) as value3,
    coalesce(sum(value) filter(where item = 'item4'), 0) as value4
from mytable
group by year

这假设它value是数字数据类型。


推荐阅读