小编典典

按周分组,如何获得空周?

sql

我有以下代码,该代码以周为单位对某些事件(YYYY-MM-DD HH:MM:SS)进行分组,例如显示为“ Y:2010-Week:50”。

SELECT DATE_FORMAT(date, 'Y:%X - Week:%V') AS regweek, COUNT(*) as number

效果很好,但即使没有任何活动,我也想整周返回。

如果在第三周未注册任何事件,此刻我会得到:

week 1: 10
week 2: 1
week 4: 2

我想得到:

week 1: 10
week 2: 1
week 3: 0
week 4: 2

阅读 231

收藏
2021-03-17

共1个答案

小编典典

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

[更新]:请注意使用COUNT(日期)的用户,而不是COUNT(*)。累加COUNT时,SQL不会在日期列中包含NULL值。由于缺少的星期没有日期,因此正确地为您提供了那几周的0个事件。

2021-03-17