Этот запрос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 (который также является наивысшей стоимостью HeroTypeIDCount) для PlayerID, но в случае связей наибольший winrate должен иметь приоритет. Вот пример того, что я хотел бы получить:
PlayerID, HeroTypeID, HeroTypeIDCount, WinRate, Wins, Losses
1, 24, 5, 0.8000, 4, 1
2, 7, 1, 1.0000, 1, 0
Как вы должны писать такой запрос?
Edit:
Хорошо, вот простой Создать/Вставить таблицу для производства результата.
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 для инструкции create/insert для полученного выше результата. – l46kok
Может быть, я не понимаю, но для playerID 1 самый высокий winrate для 11 и 27, а не 24. Правильно? –