我有兩個 MySQL 表,稱為“帳戶”和“事件”。
帳戶
| ID | 姓名 |
|---|---|
| 1 | 皮特 |
| 2 | 喬希 |
| 3 | 哈利 |
活動
| ID | 日期 | 帳戶ID |
|---|---|---|
| 1 | 2021-10-09 | 1 |
| 2 | 2021-09-25 | 1 |
| 3 | 2021-10-23 | 2 |
| 4 | 2021-11-06 | 1 |
| 5 | 2021-10-13 | 1 |
| 6 | 2021-11-17 | 2 |
| 7 | 2021-11-06 | 3 |
| 8 | 2021-12-04 | 3 |
events 表中的 account_id 鏈接到 accounts 表中的 id。
我的問題是:對于帳戶表中的每個唯一用戶,我可以使用哪個查詢來計算每個月的星期六(日期 YYYY-mm-dd 格式)?所以我得到了下一個結果:
| 姓名 | 九月 | 十月 | 十一月 | 十二月 |
|---|---|---|---|---|
| 喬希 | 0 | 1 | 0 | 0 |
| 皮特 | 1 | 1 | 1 | 0 |
| 哈利 | 0 | 0 | 1 | 1 |
我已經嘗試了很多查詢(即(內部)JOIN、DISTINCT 和 GROUP BY 關鍵字),但我沒有得到確切的結果。你能幫我么?
提前謝謝了!
uj5u.com熱心網友回復:
使用WEEKDAY判斷日期是否為星期六
回傳日期的作業日索引(0 = 星期一,1 = 星期二,... 6 = 星期日)。
SELECT
MAX(a.name) name
, (
SUM( CASE WHEN e.`date` between '2021-09-01' AND '2021-09-30' THEN 1 ELSE 0 END)
) "September"
, (
SUM( CASE WHEN e.`date` between '2021-10-01' AND '2021-10-31' THEN 1 ELSE 0 END)
) "October"
, (
SUM( CASE WHEN e.`date` between '2021-11-01' AND '2021-11-30' THEN 1 ELSE 0 END)
) "November"
, (
SUM( CASE WHEN e.`date` between '2021-12-01' AND '2021-12-31' THEN 1 ELSE 0 END)
) "December"
FROM Accounts a
LEFT JOIN Events e ON e.account_id = a.id AND WEEKDAY(e.`date`) = 5
GROUP BY a.id
;
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=2689e975b18f3a208fdda2d78b50b56c
uj5u.com熱心網友回復:
基本上你可以使用 DAYOFWEEK 函式和 GROUP BY MONTH
SELECT
account_id,
MONTH(date),
COUNT(*)
FROM Events
WHERE DAYOFWEEK(date) = 7
GROUP BY account_id, MONTH(date);
SQL小提琴在這里
以及何時可以在收到的表上使用 PIVOT,例如:
WITH res AS (
SELECT
account_id,
MONTH(date) mnth,
COUNT(*) cnt
FROM Events
WHERE DAYOFWEEK(date) = 7
GROUP BY account_id, MONTH(date)
) SELECT
account_id,
name,
SUM(mnth=1) Januar,
--
SUM(mnth=9) September,
SUM(mnth=10) October,
SUM(mnth=11) November,
SUM(mnth=12) December
FROM res
JOIN Accounts ON Accounts.id = account_id
GROUP BY account_id, name;
SQL 樞軸小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/336001.html
