Управл_данными / 10-func
.pdfГруппировка. Пример 3
Группировка по нескольким полям (вложенные группы):
SELECT Регион, Статус FROM Города GROUP BY Регион, Статус
В результате получим:
Группировка. Пример 4
Кроме группировочных полей, в результирующую таблицу можно добавлять статистические функции:
AVG(), COUNT(), SUM(), MIN(), MAX()
SELECT Статус , COUNT(*) AS Количество FROM Города GROUP BY Статус
В результате получим:
22
Фильтрация групп
SQL позволяет осуществлять фильтрацию групп — указывать, какие группы должны быть включены в результат, а какие исключены из него
Например, вам может понадобиться список клиентов, которые сделали хотя бы два заказа.
Чтобы получить такие данные, необходим фильтр, относящийся к целой группе, а не к отдельным строкам.
В данном случае предложение WHERE использовать нельзя, поскольку фильтры WHERE фильтруют строки, а не группы.
Вместо предложения WHERE предлагается другое предложение, подходящее для этих целей: предложение HAVING.
23
Предложение HAVING
Предложение HAVING очень похоже на предложение WHERE.
Все типы выражений в предложении WHERE могут быть также использованы с предложением HAVING.
Разница состоит в том, что WHERE фильтрует строки, а HAVING — группы.
24
Пример
SELECT Фирма, COUNT(*) AS N
FROM Продукты
GROUP BY Фирма
SELECT Фирма, COUNT(*) AS N
FROM Продукты
GROUP BY Фирма
HAVING COUNT(*)>2
SELECT Фирма, COUNT(*) AS N
FROM Продукты
GROUP BY Фирма
HAVING COUNT(*)>2 AND Фирма > 1
25
HAVING и WHERE
Оба предложения HAVING и WHERE могут применяться одновременно в одном SQL-запросе
WHERE фильтрует до того, как данные будут сгруппированы,
HAVING фильтрует после того, как данные были сгруппированы
26
Пример
SELECT Фирма, COUNT(*) AS N FROM Продукты
GROUP BY Фирма HAVING COUNT(*)>2
SELECT Фирма, COUNT(*) AS N FROM Продукты
WHERE Цена < 30
GROUP BY Фирма
HAVING COUNT(*)>2;
27
Группирование и сортировка
Как правило, каждый раз, когда вы используете предложение GROUP BY, приходится указывать и предложение ORDER BY.
Не следует надеяться на то, что ваши данные отсортирует предложение GROUP BY
SELECT Фирма, COUNT(*) AS N
FROM Продукты
WHERE Цена < 30
GROUP BY Фирма
HAVING COUNT(*)>2
ORDER BY COUNT(*)
28
Порядок предложений в операторе SELECT
Предложения оператора SELECT указываются в определенном порядке.
Ниже перечислены все предложения, которые мы изучили о сих пор, в порядке, в котором они должны использоваться:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
29