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.