這是表格中的一些資料
slm
| ID | Grade_level | 時期 |
|---|---|---|
| 1 | 1級 | 一年級 |
| 2 | 2年級 | 二年級 |
slm_activities
| ID | 苗條的 | 活動 | 數數 |
|---|---|---|---|
| 1 | 1 | 77 | 5 |
| 2 | 2 | 72 | 6 |
時期
| ID | 時期 |
|---|---|
| 1 | 一年級 |
| 2 | 二年級 |
| 3 | 三年級 |
| 4 | 四年級 |
活動
| ID | 活動 |
|---|---|
| 72 | 課 |
| 75 | 頁 |
| 77 | 測驗 |
我需要為 mysql 獲取這種輸出,它將顯示所有型別的活動和所有時段,然后將它們的計數值相加,如果該時段內沒有遇到其他活動,activitycount 將顯示 0
| 活動計數 | 活動 | 時期 |
|---|---|---|
| 5 | 測驗 | 一年級 |
| 0 | 測驗 | 二年級 |
| 0 | 測驗 | 三年級 |
| 0 | 測驗 | 四年級 |
| 0 | 課 | 一年級 |
| 6 | 課 | 二年級 |
| 0 | 課 | 三年級 |
| 0 | 頁 | 一年級 |
| 0 | 頁 | 二年級 |
| 0 | 頁 | 三年級 |
| 0 | 頁 | 四年級 |
這是我當前的 mysql 查詢
SELECT SUM(count) AS activitycount, activities.activity, periods.period
FROM slm_activities
LEFT JOIN activities ON activities.id = slm_activities.activity
LEFT JOIN slm ON slm_activities.slmid = slm.id
LEFT JOIN periods ON periods.period = slm.period
GROUP BY activities.activity, periods.period
uj5u.com熱心網友回復:
由于您需要顯示每個活動的所有期間,因此您需要使用CROSS JOIN它。該表slm還應存盤表而不是id欄位。periodsperiod
SELECT SUM(IFNULL(count, 0)) AS activitycount, activities.activity, periods.period
FROM activities
CROSS JOIN periods
LEFT JOIN slm ON periods.period = slm.period
LEFT JOIN slm_activities ON activities.id = slm_activities.activity
AND slm.id = slm_activities.slmid
GROUP BY activities.activity, periods.period
ORDER BY activities.activity, periods.period;
結果
| 活動計數 | 活動 | 時期 |
|---|---|---|
| 0 | 課 | 一年級 |
| 6 | 課 | 二年級 |
| 0 | 課 | 三年級 |
| 0 | 課 | 四年級 |
| 0 | 頁 | 一年級 |
| 0 | 頁 | 二年級 |
| 0 | 頁 | 三年級 |
| 0 | 頁 | 四年級 |
| 5 | 測驗 | 一年級 |
| 0 | 測驗 | 二年級 |
| 0 | 測驗 | 三年級 |
| 0 | 測驗 | 四年級 |
看到這個小提琴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485855.html
上一篇:Oracle各部門平均工資
