Problem:
Chcesz uporządkować wiersze według sum wygenerowanych przez grupę rekordów.
Przykład:
Nasza baza danych zawiera tabelę o nazwie training
z danymi w czterech kolumnach:id , zaloguj się , rok i wynik .
id | zaloguj się | rok | wynik |
---|---|---|---|
1 | Andy | 2018 | 24 |
2 | Lucy | 2019 | 25 |
3 | Andy | 2019 | 20 |
4 | Lucy | 2018 | 16 |
5 | Gary | 2019 | 18 |
6 | Gary | 2018 | 19 |
7 | Gary | 2017 | 22 |
8 | Lucy | 2017 | 21 |
9 | Andy | 2017 | 26 |
Uzyskajmy nazwę logowania każdego gracza wraz z całkowitą sumą wyników ze wszystkich lat, umieszczając rekordy w kolejności malejącej zgodnie z łącznymi wynikami graczy.
Rozwiązanie:
Użyjemy operatora ORDER BY, aby uporządkować rekordy na podstawie funkcji agregującej SUM()
, który oblicza łączny wynik każdego gracza we wszystkich latach.
Oto zapytanie, które napiszesz:
SELECT login, SUM(score) AS total_score FROM training GROUP BY login ORDER BY SUM(score) DESC;
Oto wynik:
logowanie | total_score |
---|---|
Andy | 70 |
Lucy | 62 |
Gary | 59 |
Dyskusja:
Użyj ORDER BY, jeśli chcesz uporządkować wiersze według wartości zwracanej przez funkcję agregującą, taką jak SUM()
. Po operatorze ORDER BY następuje funkcja agregująca (w naszym przykładzie SUM()
). DESC jest umieszczany po tej funkcji, aby określić malejący porządek sortowania. W ten sposób najpierw wyświetlane są najwyższe wartości zagregowane, a następnie wyświetlane są wartości stopniowo niższe. Aby posortować w kolejności rosnącej, możesz określić ASC lub po prostu pominąć dowolne słowo kluczowe, ponieważ rosnąco jest domyślną kolejnością sortowania.
W powyższym zapytaniu wybieramy login każdego gracza i sumę jego wyniku za wszystkie lata. Ten łączny wynik jest obliczany przy użyciu funkcji SUM() z kolumną wyniku jako argumentem. Dodajemy alias dla tej wartości zagregowanej (SUM(score) AS total_score
); możesz użyć tego aliasu zamiast funkcji agregującej w klauzuli ORDER BY (ORDER BY total_score DESC
).
Zauważ, że dołączamy login w GRUPA WG. Jeśli uwzględniamy kolumnę w SELECT, musimy również użyć kolumny w GROUP BY. W tym przykładzie używamy klauzuli GROUP BY, po której następuje login kolumny, ponieważ umieściliśmy tę kolumnę w SELECT. Zauważ, że GROUP BY jest umieszczana przed ORDER BY w zapytaniu.