Опишите назначение ключевых слов GROUP BY, having, ORDER BY оператора select. Приведите примеры использования указанных ключевых слов

Предложение 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;



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: