【问题标题】: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 

【问题讨论】:

  • Arun Palanisamy 不,请再次查看我的问题。问题是输出中的每一行都应该以相同的顺序包含所有值,如果不存在,则为 0。
  • 为什么02008 的第一列中?你怎么点这个?
  • 请阅读我的第二个示例,跳过第一部分,仅包含 2 个项目。它没有提供信息。换句话说,我有 5 件商品待售,每件商品可能有一些年份的销售数据,也可能没有。我每年都需要一个数组,即使数据库中没有行,它们都将以相同的顺序出现。

标签: sql postgresql group-by pivot aggregate-functions


【解决方案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 是数字数据类型。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2020-03-31
    • 2015-07-12
    相关资源
    最近更新 更多