Проблем:
Обединихте данните в групи, но искате да сортирате записите в низходящ ред по броя на елементите в групите.
Пример:
Нашата база данни има таблица с име user с данни в следните колони:id , first_name , last_name и country .
| id | first_name | фамилно_име | държава |
|---|---|---|---|
| 1 | Лиза | Уилямс | Англия |
| 2 | Гари | Андерс | Полша |
| 3 | Том | Уилямс | Полша |
| 4 | Майкъл | Кафяв | Франция |
| 5 | Сюзън | Смит | САЩ |
| 6 | Ан | Джоунс | САЩ |
| 7 | Ели | Милър | Полша |
Нека създадем отчет за нашите потребители. Ще групираме резултатите по country и пребройте броя на потребителите от всяка държава. Но също така ще сортираме групите в низходящ ред по брой потребители. По този начин страните с най-голям брой потребители ще се покажат в горната част.
Решение:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
| country | count(id) |
|---|---|
| Полша | 3 |
| САЩ | 2 |
| Англия | 1 |
| Франция | 1 |
Дискусия:
За да сортирате избраните записи по броя на елементите във всяка група, използвате ORDER BY клауза.
Първата стъпка е да използвате GROUP BY клауза за създаване на групите (в нашия пример ние групираме по country колона). След това в клаузата ORDER BY използвате агрегатната функция COUNT, която отчита броя на стойностите в колоната по ваш избор; в нашия пример ние броим различни идентификатори с COUNT(id) . Това ефективно отчита броя на елементите във всяка група. ORDER BY клаузата след това сортира групите според това изчисление.
Както обикновено, можете да използвате както възходящ, така и низходящ ред с ORDER BY . Ако искате низходящ ред (както в този пример), използвайте DESC ключова дума. Възходящият ред не се нуждае от ключова дума, защото е по подразбиране, но можете да използвате ASC ключова дума, ако искате да бъдете изрични. Това е същият пример, но с резултати, сортирани във възходящ ред:
Решение:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
Ето резултата:
| country | count(id) |
|---|---|
| Англия | 1 |
| Франция | 1 |
| САЩ | 2 |
| Полша | 3 |