2015-01-20 159 views
0

我需要通過計算他的玩家ID出現在另一張桌子上的次數來計算玩家玩過的遊戲數量,下面是我玩過的代碼:INNER JOIN中的COUNT()行值

SELECT players.playerID, players.fName, players.lName, matches.playerID, COUNT(matches.playerID) AS 'gamesPlayed' 
     FROM players 
     INNER JOIN matches 
     ON matches.playerID = players.playerID 
     WHERE players.playerID=matches.playerID 
     ORDER BY gamesPlayed" 

目前有2名玩家玩過2場比賽。

當前代碼返回1個玩家玩過4場比賽。

我想讓COUNT(matches.playerID)返回唯一的匹配,其中players.playerID = matches.playerID。

任何幫助非常感謝!如果你想甚至誰發揮零個遊戲,那麼玩家

SELECT p.playerID, p.fName, p.lName, COUNT(*) AS gamesPlayed 
    FROM players p INNER JOIN matches m 
    ON p.playerID = m.playerID 
GROUP BY p.playerID, p.fName, p.lName 
ORDER BY gamesPlayed 

SELECT p.playerID, p.fName, p.lName, COUNT(m.playerID) AS gamesPlayed 
    FROM players p LEFT JOIN matches m 
    ON p.playerID = m.playerID 
GROUP BY p.playerID, p.fName, p.lName 
ORDER BY gamesPlayed 

我用COUNT(m.playerID)代替COUNT(*)在上面的原因是因爲COUNT(*)

+1

在首位:您的查詢缺少'GROUP BY',第二個 - 請檢查COUNT'接受的參數(在這個查詢中它與COUNT(*)'沒有什麼不同) – zerkms 2015-01-20 23:46:05

+0

包含一個由查詢組成的組現在可以工作了,謝謝zerkms – Neil 2015-01-20 23:56:38

回答

1

您需要GROUP BY在這種情況下總是至少有一個,如果唯一匹配的值是NULL,則COUNT(m.playerID)可以爲零。

+0

謝謝你,決定向玩家展示0場比賽! – Neil 2015-01-21 00:23:50

0

在首位:您的查詢缺少GROUP BY,在第二 - 請檢查什麼參數COUNT接受(在這個查詢它沒有從COUNT(*)不同) - zerkms