我真的認爲我的問題不是太具體,我只是不知道如何解釋它。滿足條件的行數
說我有一個表,下面Collumns
team | gameType | date | outcome
我想創建列出有關球隊的一些統計數據的視圖
SELECT team, count(*) as FROM matches GROUP BY team ORDER BY total DESC
現在我想添加列計算總數
- 這是場聯賽
- 已經在過去的一個月
- 勝
- 損失
- 關係
目的是在數據庫中,沒有任何新的表或列創建一個視圖。
我真的認爲我的問題不是太具體,我只是不知道如何解釋它。滿足條件的行數
說我有一個表,下面Collumns
team | gameType | date | outcome
我想創建列出有關球隊的一些統計數據的視圖
SELECT team, count(*) as FROM matches GROUP BY team ORDER BY total DESC
現在我想添加列計算總數
目的是在數據庫中,沒有任何新的表或列創建一個視圖。
您可以在聚合函數中使用case語句來僅聚合特定事件。
SELECT
team,
count(*) total_matches,
count(case when gameType = 'league' then 1 end) league_matches,
count(case then date > now() - INTERVAL 30 DAY then 1 end) recent_matches,
...
FROM matches
GROUP BY team
總的想法是使用CASE表達式骨料
SELECT
team,
count(*) as total,
count(CASE WHEN outcome = 'WIN' THEN 1 END) as wins,
count(CASE WHEN outcome = 'DRAW' THEN 1 END) as draw,
count(CASE WHEN outcome = 'LOSE' THEN 1 END) as losses,
count(CASE WHEN gametype = 'League' THEN 1 END) as leaguegames,
count(CASE WHEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) < dateTHEN 1 END) as lastmonth
FROM matches
GROUP BY team
ORDER BY total DESC
有點更簡單和更可讀內部(至少對我來說)比使用的情況是使用OR:
SELECT
team,
count(*) as total,
count(outcome = 'WIN' OR NULL) as wins,
count(outcome = 'DRAW' OR NULL) as draw,
...
FROM matches
GROUP BY team
CASE是我在找的,謝謝! – Moak
@Konerak:沒有。對於缺少的「ELSE」條件,COUNT(NULL)將被忽略 – gbn