【问题标题】:Count rows grouped by months as columns将按月分组的行计数为列
【发布时间】:2020-12-03 11:26:29
【问题描述】:

我有以下数据(实际上跨越多年,但对于这个例子,我只包括了 4 个月)

id  created_at  staff
--------------------------------
1   2010-01-01  Coder
2   2010-01-15  Developer
3   2010-03-01  Data Analyst
4   2010-01-20  Developer
5   2010-03-13  Data Analyst
6   2010-04-05  Tester
7   2010-04-01  Tester
8   2010-04-04  Business Analyst
9   2010-01-22  Business Analyst
10  2010-01-25  Coder

我想创建一个查询,计算每个年月的 staff 数量。下面是我期望从该查询中得到的输出示例。

staff               2010-01   2010-02   2010-03   2010-04   
----------------------------------------------------------
Coder               2         0         0         0
Developer           2         0         0         0
Data Analyst        0         0         2         0
Tester              0         0         0         2
Business Analyst    1         0         0         1

非常感谢任何帮助!

【问题讨论】:

  • 红移。谢谢,我修改了标签

标签: sql datetime pivot amazon-redshift


【解决方案1】:

对于固定的月份列表,可以进行条件聚合:

select staff,
    sum(case when date_trunc('month', created_at) = date '2010-01-01' then 1 else 0 end) as cnt_2010_01,
    sum(case when date_trunc('month', created_at) = date '2010-02-01' then 1 else 0 end) as cnt_2010_02,
    sum(case when date_trunc('month', created_at) = date '2010-03-01' then 1 else 0 end) as cnt_2010_03,
    sum(case when date_trunc('month', created_at) = date '2010-04-01' then 1 else 0 end) as cnt_2010_04
from mytable
group by staff

【讨论】:

  • 感谢您发布此信息。当我看到所有月份的表格时,它看起来充满希望!但是,每一列都包含第一个月的值。我在原始表格中未能证明的是 created_at 是一个时间戳,因此当使用 date_trunc 函数时,它会将时间变为 00:00:00。不确定这是否是问题的原因?
  • 很奇怪,我刚刚在 sqlfiddle 上运行了您的查询,它可以工作......我想知道为什么它在我的 redshift 数据库上没有按预期工作? sqlfiddle.com/#!17/a59c3/2
  • 我是个白痴。我改用了count 函数,因为我认为你的 SUM 打错了....谢谢你的帮助!
猜你喜欢
  • 2017-07-26
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2020-03-06
相关资源
最近更新 更多