我想離開一個帶有銷售表的日歷表,并按用戶按天回傳所有銷售(包括沒有銷售的所有天)。然而,出于某種原因,我只得到銷售的日子。正如您在下面看到的,沒有應用過濾器。我在這里做錯了什么?
在我的 SQL 代碼下方,所有表和希望的最終結果。
MySQL 查詢
SELECT
calendar.date AS date,
sales.user_id AS user_id,
CASE
WHEN sales.date = calendar.date THEN sales.quantity
ELSE 0
END AS quantity
FROM calendar
LEFT JOIN sales
ON calendar.date = sales.date
DATE 表(從 2020-01-01 到 2020-01-31)
| 日期 |
|---|
| 2020-01-01 |
| 2020-01-02 |
| ... |
| 2020-01-31 |
銷售表
| 日期 | 用戶身份 | 數量 |
|---|---|---|
| 2020-01-03 | 1 | 10 |
| 2020-01-12 | 1 | 12 |
| 2020-01-20 | 1 | 2 |
| 2020-01-01 | 2 | 13 |
| 2020-01-29 | 2 | 8 |
期望的結果
| 日期 | 用戶身份 | 數量 |
|---|---|---|
| 2020-01-01 | 1 | 0 |
| 2020-01-02 | 1 | 0 |
| 2020-01-03 | 1 | 10 |
| 2020-01-04 | 1 | 0 |
| 2020-01-05 | 1 | 0 |
| 2020-01-06 | 1 | 0 |
| 2020-01-07 | 1 | 0 |
| 2020-01-08 | 1 | 0 |
| 2020-01-09 | 1 | 0 |
| 2020-01-10 | 1 | 0 |
| 2020-01-11 | 1 | 0 |
| 2020-01-12 | 1 | 12 |
| 2020-01-13 | 1 | 0 |
| 2020-01-14 | 1 | 0 |
| 2020-01-15 | 1 | 0 |
| 2020-01-16 | 1 | 0 |
| 2020-01-17 | 1 | 0 |
| 2020-01-18 | 1 | 0 |
| 2020-01-19 | 1 | 0 |
| 2020-01-20 | 1 | 2 |
| 2020-01-21 | 1 | 0 |
| 2020-01-21 | 1 | 0 |
| 2020-01-22 | 1 | 0 |
| 2020-01-23 | 1 | 0 |
| 2020-01-24 | 1 | 0 |
| 2020-01-25 | 1 | 0 |
| 2020-01-26 | 1 | 0 |
| 2020-01-27 | 1 | 0 |
| 2020-01-28 | 1 | 0 |
| 2020-01-29 | 1 | 0 |
| 2020-01-30 | 1 | 0 |
| 2020-01-31 | 1 | 0 |
| 2020-01-01 | 2 | 13 |
| 2020-01-02 | 2 | 0 |
| 2020-01-03 | 2 | 0 |
| 2020-01-04 | 2 | 0 |
| 2020-01-05 | 2 | 0 |
| 2020-01-06 | 2 | 0 |
| 2020-01-07 | 2 | 0 |
| 2020-01-08 | 2 | 0 |
| 2020-01-09 | 2 | 0 |
| 2020-01-10 | 2 | 0 |
| 2020-01-11 | 2 | 0 |
| 2020-01-12 | 2 | 0 |
| 2020-01-13 | 2 | 0 |
| 2020-01-14 | 2 | 0 |
| 2020-01-15 | 2 | 0 |
| 2020-01-16 | 2 | 0 |
| 2020-01-17 | 2 | 0 |
| 2020-01-18 | 2 | 0 |
| 2020-01-19 | 2 | 0 |
| 2020-01-20 | 2 | 0 |
| 2020-01-21 | 2 | 0 |
| 2020-01-21 | 2 | 0 |
| 2020-01-22 | 2 | 0 |
| 2020-01-23 | 2 | 0 |
| 2020-01-24 | 2 | 0 |
| 2020-01-25 | 2 | 0 |
| 2020-01-26 | 2 | 0 |
| 2020-01-27 | 2 | 0 |
| 2020-01-28 | 2 | 0 |
| 2020-01-29 | 2 | 8 |
| 2020-01-30 | 2 | 0 |
| 2020-01-31 | 2 | 0 |
uj5u.com熱心網友回復:
用戶在沒有銷售的那一天也是未知的。要解決此問題,您可以執行以下操作:
SELECT
calendar.date AS date,
su.user_id AS user_id,
COALESCE( sales.quantity,0) AS quantity
FROM calendar
CROSS JOIN (SELECT DISTINCT user_id FROM sales) su
LEFT JOIN sales
ON calendar.date = sales.date AND sales.user_id=su.user_id
ORDER BY 2,1
見小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/428229.html
上一篇:如何在一列中連接多個不同的行
