2011-11-07 111 views
0

我真的認爲我的問題不是太具體,我只是不知道如何解釋它。滿足條件的行數

說我有一個表,下面Collumns

team | gameType | date | outcome

我想創建列出有關球隊的一些統計數據的視圖

SELECT team, count(*) as FROM matches GROUP BY team ORDER BY total DESC

現在我想添加列計算總數

  • 這是場聯賽
  • 已經在過去的一個月
  • 損失
  • 關係

目的是在數據庫中,沒有任何新的表或列創建一個視圖。

回答

3

您可以在聚合函數中使用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 
3

總的想法是使用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 
+0

CASE是我在找的,謝謝! – Moak

+0

@Konerak:沒有。對於缺少的「ELSE」條件,COUNT(NULL)將被忽略 – gbn

3

有點更簡單和更可讀內部(至少對我來說)比使用的情況是使用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