Ho alcune tabelle che contengono dati sui giocatori e i giochi che hanno lanciato questa stagione in un centro di bowling durante i loro campionati. Ciò che questa particolare query viene utilizzata è quella di ordinare le medie X in alto quest'anno per gli uomini e per le donne. Ho tutto questo giù, ma ho ancora un problema in alcuni casi particolari quando alcuni giocatori giocano in più leghe e hanno più di una delle loro medie nella top X.Ottieni una media massima per ogni record distinto in una query SQL
Ovviamente, voglio solo elencare il migliore media per un dato giocatore, quindi se il giocatore A ha la media migliore con 200 in League ABC e anche la seconda media migliore con 198 in League DEF, voglio solo i 200 elencati.
Ecco una versione semplificata della query che vorrei modificare, perché adesso devo rimuovere i duplicati manualmente o dovrei scrivere un sorter in un'altra lingua, ma preferirei farlo in puro SQL . (Ho tolto solo informazioni irrilevanti dalla query per questo esempio):
SELECT playerId, ROUND(AVG(score),2)Average, season, leagueName, COUNT(score)NumGames FROM Scores
WHERE season = '2011-2012' AND score > -1
GROUP BY season, playerID, leagueName
ORDER BY Average DESC LIMIT 0,30
In sostanza, la tabella Scores
contiene ogni singolo gioco, un playerid, la stagione in cui il gioco è stato giocato e il leagueName (e altre colonne che non sono richiesti in questo esempio).
Il WHERE
è quello di assicurarsi che il gioco è stato giocato in questa stagione e che il punteggio è positivo (-1 è per quando le persone sono assenti). Io raggruppo tutto per stagione, playerID e leagueName, quindi ottengo una media di LEAGUE per ogni giocatore invece di una media di tutte le partite giocate in diversi campionati.
Ho provato a utilizzare la parola chiave DISTINCT
, ma non funziona perché non è possibile utilizzare DISTINCT
per una sola colonna. Ho provato anche altre cose, ma nessuna di esse è arrivata a lavorare, quindi mi chiedo se è possibile farlo o se dovrò ricorrere a un'altra lingua per ordinare questo set di risultati e rimuovere i duplicati?
Molto bello, questa è la mia risposta preferita in quanto funziona in una singola query senza la necessità di tabelle temporanee. Grazie mille! –