将按月分组的行计数为列
Posted
技术标签:
【中文标题】将按月分组的行计数为列【英文标题】: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
非常感谢任何帮助!
【问题讨论】:
红移。谢谢,我修改了标签 【参考方案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 打错了....谢谢你的帮助!以上是关于将按月分组的行计数为列的主要内容,如果未能解决你的问题,请参考以下文章