1
SELECT
PlayerID, HeroTypeID, HeroTypeIDCount, Wins/(Losses + Wins) AS WinRate, Wins, Losses
FROM (
SELECT E.PlayerID AS PlayerID,
FK_HeroTypeID AS HeroTypeID,
COUNT(FK_HeroTypeID) AS HeroTypeIDCount,
SUM(CASE WHEN D.Result = 'LOSS' THEN 1 ELSE 0 END) AS Losses,
SUM(CASE WHEN D.Result = 'WIN' THEN 1 ELSE 0 END) AS Wins
FROM GamePlayerDetail D
JOIN Player E
ON D.FK_PlayerID = E.PlayerID
JOIN Game I
ON D.FK_GameID = I.GameID
WHERE PlayedDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE()
GROUP BY E.PlayerID, FK_HeroTypeID
) AS T
ORDER BY PlayerID
產生以下結果:
# PlayerID, HeroTypeID, HeroTypeIDCount, WinRate, Wins, Losses
'1', '11', '1', '1.0000', '1', '0'
'1', '13', '3', '0.3333', '1', '2'
'1', '24', '5', '0.8000', '4', '1'
'1', '27', '1', '1.0000', '1', '0'
'2', '28', '1', '0.0000', '0', '1'
'2', '6', '1', '0.0000', '0', '1'
'2', '30', '1', '0.0000', '0', '1'
'2', '7', '1', '1.0000', '1', '0'
我想什麼做的就是最常見的FK_HeroTypeID(這也是HeroTypeIDCount的最高值),但是在關係的情況下,最高的勝利率應該優先。這裏有一個我想要得到的例子:
PlayerID, HeroTypeID, HeroTypeIDCount, WinRate, Wins, Losses
1, 24, 5, 0.8000, 4, 1
2, 7, 1, 1.0000, 1, 0
你應該怎麼寫這樣的查詢?
編輯:
好的,下面是一個簡單的創建/插入表的產生的結果。
http://sqlfiddle.com/#!9/d644a
沒有數據集的結果集就像沒有棒棒糖的棒。見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry
好吧,我已經開始編輯這個問題,並在上面生成的結果中包含用於創建/插入語句的sqlfiddle鏈接。 – l46kok
也許我不明白,但是對於playerID 1來說,最高的勝率是11和27,而不是24.對吧? –