Предложение GROUP BY позволяет вам определять подмножество значений в особом поле в терминах другого поля, и применять функцию агрегата к подмножеству. Это дает вам возможность объединять поля и агрегатные функции в едином предложении SELECT. Группировка является обязательной, если в операторе SELECT вы используете и агрегатные функции, и обычные столбцы. При этом группировка должна выполняться по всем неагрегатным столбцам.
Существует два основных правила группировки.
- Каждый столбец, включенный в неагрегатный список оператора SELECT, должен появиться в предложении GROUP BY.
- Оператор SELECT может содержать только одно предложение GROUP BY.
Это важнейшие правила группировки. Мы должны их помнить и использовать в любом нашем операторе, выполняющем группировку. Иначе получим ошибку, борьба с которой может занять слишком много нашего драгоценного времени
Предложение GROUP BY располагается после предложения WHERE и перед предложением ORDER BY.
Например, предположим что вы хотите найти сколько каких имен содержится в нашем списке, при этом упорядочивая вывод по найденному количеству (по направлению от большего к меньшему), если количество будет повторяться, отсортируем список по имени:[29]
SELECT COUNT (*), PR_NAME2
FROM PERSON
GROUP BY PR_NAME2
ORDER BY 1DESC,PR_NAME2
Получим следующий список, упорядоченный по результатам расчета функции COUNT
Листинг 14.Количество каждого имени в списке людей
| COUNT
| PR_NAME2
|
|
| Елена
|
|
| Наталья
|
|
| Татьяна
|
|
| Светлана
|
|
| Марина
|
|
| Ирина
|
|
| Оксана
|
|
| Ольга
|
|
| Екатерина
|
|
| Юлия
|
|
| Сергей
|
|
| Александр
|
|
| Анна
|
|
| Алексей
|
|
| Дмитрий
|
|
| Надежда
|
|
| Олег
|
|
| Вера
|
|
| Людмила
|
|
| Мария
|
|
| Владимир
|
|
| Ксения
|
|
| Лариса
|
|
| Максим
|
|
| Анастасия
|
|
| Вячеслав
|
|
| Евгений
|
|
| Илья
|
|
| Любовь
|
|
| Михаил
|
|
| Семен
|
|
| Станислав
|
|
| Эдуард
|
|
| Алевтина
|
|
| Алмаз
|
|
| Альбина
|
|
| Амина
|
|
| Ангелина
|
|
| Антонина
|
|
| Валентина
|
|
| Валерий
|
|
| Василий
|
|
| Виктория
|
|
| Галина
|
|
| Гульнара
|
|
| Евгения
|
|
| Кирил
|
|
| Константин
|
|
| Лиана
|
|
| Лилия
|
|
| Марианна
|
|
| Назгуль
|
|
| Николай
|
|
| Нина
|
|
| Павел
|
|
| Петр
|
|
| Руслан
|
|
| Тарас
|
|
| Эльвира
|
|
| Эмма
|
|
| Юлиана
|
|
| Юлий
|
|
| Явар
|