Dan*_*ilo 11 mysql sql group-by
我有以下代码,它们在几周内对一些事件(YYYY-MM-DD HH:MM:SS)进行分组,例如显示为"Y:2010 - Week:50".
SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(*) as number
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我希望返回所有周,即使没有发生任何事件.
如果在第三周没有注册任何事件,那么我得到:
week 1: 10
week 2: 1
week 4: 2
Run Code Online (Sandbox Code Playgroud)
我想得到:
week 1: 10
week 2: 1
week 3: 0
week 4: 2
Run Code Online (Sandbox Code Playgroud)
SQL无法返回某些表中不存在的行.为了获得你想要的效果,你需要一个表Weeks(WeekNo INT),每年可能每周有一行(IIRC,可能是53或54周,具体取决于你的计算方式).
然后,使用OUTER JOIN将此表连接到常规结果,以便添加额外的周数.
SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(date) as number
FROM YourTable RIGHT OUTER JOIN Weeks ON WEEK(YourTable.date) = Weeks.WeekNo
Run Code Online (Sandbox Code Playgroud)
[更新]:注意COUNT(日期)的用户而不是COUNT(*).添加COUNT时,SQL不会在日期列中包含NULL值.由于缺失的周数将不会包含任何日期,因此这将在这几周正确地为您提供0个事件.