Раздел GROUP BY
Раздел ORDER BY
Раздел ORDER BY предназначен для упорядочения набора данных, возвращаемого после выполнения запроса.
SELECT TOP 10 *
FROM Дисциплины
ORDER BY Наименование
Полный синтаксис раздела следующий:
ORDER BY{ <условие_сортировки> [ASC|DESC]} [,…, n]
Параметр <условие сортировки> требует задания выражения, в соответствии с которым будет осуществляться сортировка строк. В простейшем случае это выражение представляет собой имя столбца одного из источников данных запроса.
В разделе допускается использование ключевых слов ASC (по возрастанию) и DESC (по убыванию). По умолчанию используется сортировка по возрастанию.
Данные можно отсортировать по нескольким столбцам. Сначала сортировка идет по первому столбцу, затем, если имеется множество строк с одинаковыми значениями в первом столбце, выполняется дополнительная сортировка этих строк по второму столбцу и т.д.
Раздел GROUP BY позволяет выполнять группировку строк таблицы по определенным критериям. Для каждой группы можно выполнить специальные функции агрегирования, которые применяются ко всем строкам в группе. Например суммирование однотипных значений.
|
|
Синтаксис раздела:
GROUP BY [ALL]<условие_группировки> [,…, n]
При использовании раздела GROUP BY на раздел SELECT накладываются дополнительные ограничения. В непосредственном виде разрешается указание только имен столбцов, перечисленных в разделе GROUP BY, то есть тех столбцов, по которым осуществляется группировка. Значения других столбцов не могут быть выведены в непосредственном виде, так как обычно каждая группа содержит множество строк, а врезультате выборки для каждой группы должно быть указано единственное значение. Поэтому, чтобы вывести значения столбцов, не задающих критерии группировки, необходимо использовать функции агрегирования.
В аргументе <условие_группировки> обычно указывается имя столбца.
Функции агрегирования позволяют выполнять статистическую обработку данных, посчитывая количество, сумму, среднее значение и другие величины всего набора данных.
Функция AVG вычисляет среднее значение
Синтаксис:
AVG ([ALL|DISTINCT] <выражение>)
При выполнении группировки (GROUP BY) вычисляется среднее значение для каждой группы. Если группировка не используется, то вычисляются значения по всему столбцу. Например:
SELECT AVG(Количество_часов) FROM Учебный_план
Результат запроса:
--------------------
(1 row(s) affected)
Рассмотрим AVG совместно с GROUP BY при выполнении группировки по столбцу Семестр:
SELECT Семестр, AVG(Количество_часов)
FROM Учебный _план
GROUP BY Семестр
Результат:
Семестр
------- -------
1 50
2 54
3 46
4 39
5 37
6 27
7 34
|
|
8 44
9 32
(9 row(s) affected)
COUNT()
Функция подсчитывает количество строк в группе (при выполнении группировки) или количество строк результата запроса. Синтаксис:
COUNT({[ALL|DISTINCT<выражение>]|*})
Параметр <выражение> в прстейшем случае представляет собой имя столбца. Если обрабатываемая строка в соответствующем столбце содержит значение не NULL, то счетчик будет увеличен на единицу. Указание символа * предписывает считать общее количество строк независимо от того, содержат ли они значения NULL или нет.
Пример:
SELECT COUNT (*) AS ‘Всего сотрудников’,
COUNT (Телефон) AS ‘С домашним телефоном’
FROM Кадровый_состав
Этот запрос подсчитывает общее количество строк в таблице, а так же количество ненулевых значений в столбце Телефон.
Результат:
Всего сотрудников С домашним телефоном
------------------------ -------------------------------
14 10
(1 row(s) affected)
Пример использования функции COUNT() при выполнении группировки:
SELECT Должность, COUNT(*)
FROM Кадровый_состав
GROUP BY Должность
Данный запрос возвращает количество строк в каждой группе столбца Должность:
------------------- -------------
Ассистент 3
Доцент 4
Зав.каф. 2
Проф. 3
Ст.преп. 2
(5 row(s) affected)
MAX()
Функция возвращает максимальное значение в указанном диапазоне. Эта функция может использоваться как в обычных запросах, так и в запросах с группировкой. Синтаксис:
MAX([ALL|DISTINCT] <выражение>)
Пример:
SELECT MAX(Количество_часов), MAX(Количество_часов/2)
FROM Учебный_план
Результат выполнения запроса:
------------------- -------------
140 70
(1 row(s) affected)
MIN()
Возвращает минимальное значение в указанном диапазоне. Синтаксис:
MIN ([ALL|DISTINCT]<выражение>)
Пример:
SELECT MIN(Количество_часов)
FROM Учебный_план
-----------
(1 row(s) affected)
SUM()
Функция выполняет обычное суммирование значений в указанном диапазоне. В качестве такого диапазона может рассматриваться группа или весь набор строк (без использования GROUP BY)
Синтаксис:
SUM([ALL| DISTINCT] <выражение>)
Пример:
SELECT SUM(Количество_часов), COUNT (*),SUM(Количество_часов)/ COUNT (*),AVG(Количество_часов)
FROM Учебный_план
Результат:
------------- -------------- ------------ ----------
694 89 41 41
(1 row(s) affected)
Пример группировки значений таблицы Учебный_план. Произведем группировку строк по семестрам (столбец Семестр) и подсчитаем общую нагрузку в часах на каждый семестр:
SELECT Семестр, SUM(Количество часов) AS ‘Нагрузка’
FROM Учебный_план
GROUP BY Семестр
В первом столбце выведен номер семестра. Это единственный столбец исходной таблицы, который можно включать в запрос непосредственно, так как по нему осуществляется группировка. Во втором столбце с помощью функции SUM была получена сумма значений столбца Количество_часов. Функции агрегирования работают со всеми строками группы, возвращая единственное значение для всех этих строк.
Семестр | Нагрузка |
1. | |
2. | |
3. | |
4. | |
5. | |
6. | |
7. | |
8. | |
9. |
Рассмотрим запрос, подсчитывающий количество экзаменов в каждом семестре:
SELECT Семестр, COUNT(*) AS ‘Экзамены’
FROM Учебный_план
WHERE Отчетность= ‘э’
GROUP BY Семестр
Результат выполнения запроса:
Семестр | Экзамены |
1. | |
2. | |
3. | |
4. | |
5. | |
6. | |
7. | |
8. | |
9. |