Проблем:
Искате да подредите редовете по сумите, генерирани от група записи.
Пример:
Нашата база данни има таблица с име 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 в заявката.