1
に基づいて、カラムから最頻値を取得します。このクエリSQL条件
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を取得していますこれはまた、PlayerIDごとにHeroTypeIDCountの最高値ですが、ネクタイの場合は、最高の勝利が優先されます。ここに私が得たいものの例があります:
PlayerID, HeroTypeID, HeroTypeIDCount, WinRate, Wins, Losses
1, 24, 5, 0.8000, 4, 1
2, 7, 1, 1.0000, 1, 0
あなたはどのようにこのようなクエリを書くべきですか?
編集:
[OK]を、ここで生成される結果のための簡単な作成/挿入テーブルです。
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
申し訳ありませんが、先に作成した結果に対してcreate/insert文のsqlfiddleリンクを含めるように質問を編集しました。 – l46kok
私は理解できないかもしれませんが、playerID 1の場合、最高の勝利は24でなく11と27です。 –