sql >> Databáze >  >> RDS >> Database

Jak seřadit řádky podle součtu skupiny v SQL

Problém:

Chcete seřadit řádky podle součtů generovaných skupinou záznamů.

Příklad:

Naše databáze má tabulku s názvem training s údaji ve čtyřech sloupcích:id , přihlaste se , rok a skóre .

id přihlášení rok skóre
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

Pojďme získat přihlašovací jméno každého hráče spolu s celkovým součtem skóre za všechny roky a seřadit záznamy v sestupném pořadí podle celkového skóre hráčů.

Řešení:

K objednání záznamů na základě agregační funkce SUM() použijeme operátor ORDER BY , která vypočítává celkové skóre pro každého hráče za všechny roky.

Zde je dotaz, který byste napsali:

SELECT login,
  SUM(score) AS total_score
FROM training
GROUP BY login
ORDER BY SUM(score) DESC;

Zde je výsledek:

přihlášení celkové_skóre
Andy 70
Lucy 62
Gary 59

Diskuse:

Použijte ORDER BY, pokud chcete seřadit řádky podle hodnoty vrácené agregační funkcí, jako je SUM() . Za operátorem ORDER BY následuje agregační funkce (v našem příkladu SUM() ). DESC se umístí za tuto funkci pro určení sestupného pořadí řazení. Nejprve se tedy zobrazí nejvyšší agregované hodnoty a poté se zobrazí postupně nižší hodnoty. Chcete-li seřadit vzestupně, můžete zadat ASC nebo jednoduše vynechat kterékoli klíčové slovo, protože vzestupně je výchozí řazení.

Ve výše uvedeném dotazu vybereme přihlášení každého hráče a součet jejich skóre za všechny roky. Toto celkové skóre se vypočítá pomocí SUM() se sloupcem skóre jako argumentem. K této souhrnné hodnotě přidáme alias (SUM(score) AS total_score ); tento alias můžete použít místo agregační funkce v klauzuli ORDER BY (ORDER BY total_score DESC ).

Všimněte si, že zahrnujeme přihlášení ve skupině GROUP BY. Pokud zahrneme sloupec do SELECT, musíme použít i sloupec v GROUP BY. V tomto příkladu používáme klauzuli GROUP BY následovanou přihlášením do sloupce, protože jsme tento sloupec vložili do SELECT. Všimněte si, že GROUP BY je v dotazu umístěno před ORDER BY.


  1. Dotaz SQL pro sbalení duplicitních hodnot podle časového období

  2. Vrátit všechny skupiny souborů pro aktuální databázi na serveru SQL Server

  3. Máte přístup k hodnotě automatického přírůstku v MySQL v rámci jednoho příkazu?

  4. ZOBRAZIT TABULKY v MariaDB