2017-02-14 109 views
-1

我有一個相對簡單的問題,但我堅持寫一個適當的SQL查詢來顯示我需要的結果。我有一個表格,它存儲了與列表的匹配結果,這些列表示參與比賽的球員的ID,勝利者和另一個布爾列,我們可以說明是否要在結果中包含該匹配。所以欄目有:如何使用IF語句對MySQL中的行進行計數?

player1_id | player2_id | winner_id | use 

所以winner_id是取決於哪個球員贏得了前兩列的一個值。如果我想指望某個選手多少次贏得了比賽僅僅使用其中use標誌了行,我可以很容易地做到這一點有:

SELECT COUNT(*) AS total, winner_id 
FROM table 
WHERE use = 1 
GROUP BY winner_id 
ORDER BY total DESC 

不過,我也想做同樣的計數,但對於輸掉比賽的球員來說。換句話說,我不想按winner_id分組,而是按輸家編號進行分組,這將是player1_idplayer2_id的值,具體取決於哪一個不同於winner_id。任何關於如何使用簡單的查詢工作的線索?

+1

編輯你的問題,並提供樣本數據和預期的結果。 –

+0

糟糕的桌子設計 - 第一名col贏家,第二名col對手。 – user3741598

+0

不要爭辯說這是很好的桌子設計,但是有些比賽是在兩名球員之間設置的,而事先不知道誰會贏。 – mmvsbg

回答

2

你可以像這樣來算loosers:

SELECT 
    COUNT(*) AS total, 
    IF(player1_id = winner_id, player2_id, player1_id) AS looser_id 
FROM table 
WHERE use = 1 
GROUP BY looser_id 
ORDER BY total DESC 
+0

很好的答案,但爲什麼你不推薦使用'COUNT(*)'?這是計數記錄的自然方式。只有當您需要NULL檢測時(例如,在外部聯接中),纔可以對列進行計數。 –

+0

你說得對Thorsten ...謝謝你的糾正。在這種情況下計算特定列是不相關的。我會糾正我的答案。 –

+0

很好,歡呼! – mmvsbg