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