我想汇总计数,按日期部分和列分组。
例如,一个包含3列的表,每行代表一个唯一的事件:id,name,date
我想选择按名称和小时分组的总计数,当没有事件时选择零。如果我只按名称分组,我可以用每个名字的表加入。一个小时我可以做类似的事情。
我如何处理两者分组的情况,而不是每个名称+小时组合都有一行表?
答案 0 :(得分:0)
以下是mysql解决方案:
create table hours (hour int)
insert hours (hour) values (0), (1) .... (23)
select hour, name, sum(case when name is null then 0 else 1 end)
from hours left outer join
event on (hour(event.date) = hours.hour)
group by hour, name
总和(name为null的情况,然后是0 else 1 end)处理特定小时和名称没有事件的情况。计数将显示为0.对于其他人,每个匹配的行对总和贡献1。
对于sql server,请改用datepart(hour,event.date)。其余的应该是类似的
答案 1 :(得分:0)
您可以使用cross join
生成所有行,然后使用其他逻辑来填充值:
select h.hour, n.name, count(a.name) as cnt
from (select distinct hour(date) as hour from atable) h cross join
(select distinct name from atable) n left join
atable a
on hour(a.date) = h.hour and a.name = n.name
group by h.hour, n.name;