Database
 sql >> Baza danych >  >> RDS >> Database

Jak uporządkować wiersze według sumy grup w SQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak filtrowane indeksy mogą być potężniejszą funkcją?

  2. Język kontroli danych SQL

  3. SQL, jak używać SELECT

  4. Identyfikacja struktury zestawienia komponentów (BOM) w bazach danych

  5. Zrozumienie transakcji w SQL