Database
 sql >> база данни >  >> RDS >> Database

Как да подредите редове по групова сума в SQL

Проблем:

Искате да подредите редовете по сумите, генерирани от група записи.

Пример:

Нашата база данни има таблица с име training с данни в четири колони:id , влезте , година , и резултат .

id вход година резултат
1 Анди 2018 24
2 Луси 2019 25
3 Анди 2019 20
4 Луси 2018 16
5 Гари 2019 18
6 Гари 2018 19
7 Гари 2017 22
8 Луси 2017 21
9 Анди 2017 26

Нека получим името за вход на всеки играч заедно с общата сума на точките за всички години, като поставим записите в низходящ ред според общия резултат на играчите.

Решение:

Ще използваме оператора ORDER BY, за да поръчаме записи въз основа на агрегатната функция SUM() , който изчислява общия резултат за всеки играч през всички години.

Ето заявката, която бихте написали:

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

Ето резултата:

вход общ_резултат
Анди 70
Луси 62
Гари 59

Дискусия:

Използвайте ORDER BY, ако искате да подредите редове според стойност, върната от агрегатна функция като SUM() . Операторът ORDER BY е последван от агрегатната функция (в нашия пример SUM() ). DESC се поставя след тази функция, за да посочи низходящ ред на сортиране. По този начин първо се показват най-високите обобщени стойности, след което се показват постепенно по-ниски стойности. За да сортирате във възходящ ред, можете да посочите ASC или просто да пропуснете някоя от ключовите думи, тъй като възходящият е реда на сортиране по подразбиране.

В заявката по-горе избираме данните за вход на всеки играч и сумата от техния резултат за всички години. Този общ резултат се изчислява с помощта на SUM() с колоната за резултат като аргумент. Добавяме псевдоним за тази обобщена стойност (SUM(score) AS total_score ); можете да използвате този псевдоним вместо агрегатната функция в клаузата ORDER BY (ORDER BY total_score DESC ).

Забележете, че включваме вход в ГРУПА BY. Ако включим колона в SELECT, трябва да използваме и колоната в GROUP BY. В този пример използваме клауза GROUP BY, последвана от вход в колоната, защото сме поставили тази колона в SELECT. Забележете, че GROUP BY се поставя преди ORDER BY в заявката.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разрушете стените! Как да деблокирате данните си

  2. PayPal ODBC драйвер

  3. Git Съвети и най-добри практики за начинаещи

  4. Изпълнение на задачи за поддръжка на база данни на SQL с помощта на SQLCMD

  5. Как да работим с наследяване в ядрото на Entity Framework