如何将单行分组为一个?
Posted
技术标签:
【中文标题】如何将单行分组为一个?【英文标题】:How to group single rows in one? 【发布时间】:2021-04-01 21:19:01 【问题描述】:美好的一天。我有一个包含列的表:年份、项目、计数。 假设我在 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
【问题讨论】:
这能回答你的问题吗? How to concatenate strings of a string field in a PostgreSQL 'group by' query? Arun Palanisamy 不,请再次查看我的问题。问题是输出中的每一行都应该以相同的顺序包含所有值,如果不存在,则为 0。 为什么0
在2008
的第一列中?你怎么点这个?
请阅读我的第二个示例,跳过第一部分,仅包含 2 个项目。它没有提供信息。换句话说,我有 5 件商品待售,每件商品可能有一些年份的销售数据,也可能没有。我每年都需要一个数组,即使数据库中没有行,它们都将以相同的顺序出现。
【参考方案1】:
你似乎想要一些类似的东西:
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
是数字数据类型。
【讨论】:
以上是关于如何将单行分组为一个?的主要内容,如果未能解决你的问题,请参考以下文章