代码之家  ›  专栏  ›  技术社区  ›  Shisa

PostgreSQL按月份和类型分组数据

  •  1
  • Shisa  · 技术社区  · 8 年前

    我有一张这样的桌子:

    ID    item_type    date
    1      apple        2016-12-01       
    2      banana       2016-12-01      
    3      banana       2016-12-01  
    

    我需要做的是得到一个输出表,其中月份作为行,item_type作为列,以及每个组合的条目数,这样看起来像

    month    apple     banana       
    dec      1         2
    

    等等……我试过了 date_trunc 对于每月分组,但这似乎是根据日期而不是月份来计算的!我不知道如何进行多重分组。

    3 回复  |  直到 8 年前
        1
  •  5
  •   Gordon Linoff    8 年前

    使用条件聚合:

    select date_trunc('month', date) as mon,
           sum((item_type = apple)::int) as apple,
           sum((item_type = banana)::int) as banana
    from t
    group by mon
    order by mon;
    
        2
  •  1
  •   Thanos    8 年前

    无关提示,但我也不会使用“日期”作为列名,因为它是pgsql中的保留字。

        3
  •  0
  •   JulMuel    6 年前

    顺便说一句,如果我没弄错的话,查询应该是这样的:

    select date_trunc('month', date) as mon,
           sum((item_type = 'apple')::int) as apple,
           sum((item_type = 'banana')::int) as banana
    from t
    group by mon
    order by mon;
    

    为了避免Postgres发出错误,因为我假设“item_type”存储为字符串变量。