猜猜這個問題有很多varianat,但是這有一個轉折。MySQL左加入SUM不包括0
我的主表中包含記錄的公里爲特定日期爲特定用戶:
表km_run
:
|entry|mnumber|dato |km |
其中「拿督」是具體的日期。格式如下:
|1 |3 |2013-01-01|5.7
|
對於特定用戶('mnumber'),我想計算一年中每週的總和。爲此我做了一個「啞表」只是包含週數從1到53:
Table `week_list`:
|week|
|1 |
|2 |
等。
該查詢給出的總和,但是我無法找到一個方法來返回如果「km_run」中沒有特定周的條目,則爲零。
SELECT `week_list`.`week`, WEEKOFYEAR(`km_run`.`dato`), SUM(`km_run`.`km`)
FROM `week_list` LEFT JOIN `km_run` ON WEEKOFYEAR(`dato`) = `week_list`.`week`
WHERE `km_run`.`mnumber` = 3 AND `km_run`.`dato` >= '2013-01-01'
AND `km_run`.`dato` < '2014-01-01'
GROUP BY WEEKOFYEAR(`dato`)
我試圖做COALESCE(SUM(km
),0),我也曾嘗試使用周圍的總和IFNULL函數。儘管有左連接,但並不是所有來自week_list的記錄都在sql語句中返回。
這裏的結果:
week | WEEKOFYEAR(`km_run`.`dato`) | SUM(`km_run`.`km`)
1 | 1 | 58.4
3 | 3 | 50.7
4 | 4 | 39.2
正如你可以看到兩個星期跳過,而不是返回一個0
請新增小提琴您的樣本數據集,這將是有益的 –