我想聚合按日期部分和列分組的計數。SQL GROUP BY(DATEPART(),field1)結果集爲零空值
例如,3列與代表一個獨特的事件的每一行的表:ID,姓名,日期
我想選擇按名稱和時段分組總計數,用零時沒有活動。如果我只按姓名進行分組,我可以加上一個名字表。用一個小時我可以做類似的事情。
我該如何處理兩者分組的情況,而不是每個名稱+小時組合都有一個表格?
我想聚合按日期部分和列分組的計數。SQL GROUP BY(DATEPART(),field1)結果集爲零空值
例如,3列與代表一個獨特的事件的每一行的表:ID,姓名,日期
我想選擇按名稱和時段分組總計數,用零時沒有活動。如果我只按姓名進行分組,我可以加上一個名字表。用一個小時我可以做類似的事情。
我該如何處理兩者分組的情況,而不是每個名稱+小時組合都有一個表格?
以下是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
總和(情況下,當名稱爲空則0,否則,1個端)處理時,有對特定小時和名稱沒有事件的情況。計數將顯示爲0.對於其他每個匹配行貢獻1的總和。
對於sql server使用datepart(hour,event.date)代替。其餘的應該是相似的
您可以使用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;
CROSS JOIN包含每個名字含每隔一小時,然後OUTER一個表的表加入你的數據和聚合。 – mdahlman 2014-12-13 00:54:44
您正在使用哪些DBMS? – paqogomez 2014-12-13 01:18:21