Группировка данных в операторе SELECT осуществляется с помощью ключевого слова GROUP BY и ключевого слова HAVING, с помощью которого задаются условия разбиения записей на группы.
GROUP BY неразрывно связано с агрегирующими функциями, без них оно практически не используется. GROUP BY разделяет таблицу на группы, а агрегирующая функция вычисляет для каждой из них итоговое значение. Определим для примера количество студентов в каждой группе в нашей базе данных:
Ключевое слово HAVING работает следующим образом: сначала GROUP BY разбивает строки на группы, затем на полученные наборы накладываются условия HAVING. Например, устраним из предыдущего запроса те группы, которые имеют меньше 15 студентов:
В чем различие между двумя этими вариантами использования HAVING? Во втором варианте условие отбора записей мы могли поместить в раздел ключевого слова WHERE, в первом же варианте этого сделать не удастся, поскольку WHERE не допускает использования агрегирующих функций.
Для сортировки данных, получаемых при помощи оператора SELECT, служит ключевое слово ORDER BY. С его помощью можно сортировать результаты по любому столбцу или выражению, указанному в <списке_выбора>. Данные могут быть упорядочены как по возрастанию, так и по убыванию. Пример: сортировать список студентов по алфавиту:
SELECT FIO FROM students ORDER BY FIO;
Более сложный пример: получить список групп, отсортированный по алфавиту, и список студентов в них, причем для каждой группы список студентов сортируется по ФИО в обратном порядке:
SELECT groups.Group_name, students.FIO
FROM groups, students
WHERE groups. id_group = students.id_group
ORDER BY groups.Group_name ASC, students.FIO DESC;
Ключевое слово DESC задает здесь обратный порядок сортировки по полю FIO, ключевое слов ASC (его можно опускать) - прямой порядок сортировки по полю Group_name.