Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции (COUNT, MIN, MAX, AVG и SUM). Если это предложение отсутствует, и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции, и эти функции будут применяться ко всему набору строк, которые удовлетворяют предикату (условию) запроса. В противном случае все столбцы списка SELECT, не вошедшие в агрегатные функции, должны быть указаны в предложении GROUP BY. В результате чего все выходные строки запроса разбиваются на группы, характеризуемые одинаковыми комбинациями значений в этих столбцах. После чего к каждой группе будут применены агрегатные функции. Следует иметь в виду, что для GROUP BY все значения NULL трактуются как равные, то есть при группировке по полю, содержащему NULL -значения, все такие строки попадут в одну группу.
Например дано отношение Книги
Наз_книги | Автор | Издательство | Цена |
Архитектура компьютера | Таненбаум Э. С. | Питер | |
Война и мир | Толстой Л.Н. | Беларусь | |
Компьютерные сети | Таненбаум Э. С. | Питер | |
Воскресение | Толстой Л.Н. | Наука и техника | |
Анна Каренина | Толстой Л.Н. | Беларусь |
И требуется подсчитать количество книг одного автора. Получим запрос
|
|
SELECT Автор, COUNT(Автор) AS [Кол-во книг]
FROM Книги
GROUP BY Автор;
Результатом которого будет отношение
Автор | Кол-во книг |
Таненбаум Э. С. | |
Толстой Л.Н. |
Предложение HAVING — необязательный параметр оператора SELECT для указания условия на результат агрегатных функций (MAX, SUM, AVG, …). Эта предложение включается в запрос лишь при наличии предложение GROUP BY.
HAVING <условия> аналогичен WHERE <условия> за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов указанных в GROUP BY и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY. Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения. Распространённая ошибка — указание в SELECT столбца, пропущенного в GROUP BY.
Например, запрос
SELECT Издательство, SUM(Цена) AS Сумма
FROM Книги
GROUP BY Издательство
HAVING SUM(Цена) > 36000;
Выдаст издательства суммарная стоимость книг, которых превосходит 36000.
Предложение ORDER BY сортирует записи, полученные в результате запроса, в порядке возрастания (ASC) или убывания (DESC) в соответствии со значениям выбранных столбцов.
Синтаксис: ORDER BY столбец_1 [ ASC | DES C ] [, столбец_2 [ ASC | DESC ]][,...].
Если предложение ORDER BY содержит несколько атрибутов, то сначала строки сортируются по первому атрибуту. Затем строки, имеющие совпадающие значения в первом атрибуте, сортируются по второму атрибуту и т. д. По умолчанию используется порядок сортировки по возрастанию (от «A» до «Я» и от 0 до 9). Предложение ORDER BY не является обязательным. Кроме того, в список ORDER BY можно включать не только имя столбца, но и его порядковую позицию в перечне SELECT.
|
|
Например, требуется вывести отношение Книги, так чтобы авторы стояли в алфавитном порядке, а название их книг в обратном порядке, т.е. получим запрос
SELECT *
FROM Книги
ORDER BY Автор ASC, Наз_книги DESC;