Diese AbfrageSQL Erhalten häufigster Wert aus einer Spalte auf der Grundlage einer Bedingung
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
erzeugt das folgende Ergebnis:
# 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'
Was ich zu tun ist, möchte die häufigste FK_HeroTypeID bekommen (Dies ist auch der höchste Wert von HeroTypeIDCount) pro PlayerID, aber im Falle von Bindungen sollte die höchste Winrate Vorrang haben. Hier ist ein Beispiel für das, was ich gerne bekommen würde:
PlayerID, HeroTypeID, HeroTypeIDCount, WinRate, Wins, Losses
1, 24, 5, 0.8000, 4, 1
2, 7, 1, 1.0000, 1, 0
Wie sollten Sie eine Abfrage wie diese schreiben?
Edit:
Ok, hier ist eine einfache Erstellen/Insert-Tabelle für das produzierte Ergebnis.
http://sqlfiddle.com/#!9/d644a
Ein Ergebnis ohne einen Datensatz ist wie ein Stock ohne einen Lutscher. Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql-query – Strawberry
In Ordnung, ich habe die Frage bearbeitet und die sqlfiddle-Verknüpfung für die create/insert-Anweisung für das oben erzeugte Ergebnis eingefügt. – l46kok
Vielleicht verstehe ich nicht, aber für playerID 1 ist die höchste Winrate für 11 und 27, nicht 24. Richtig? –