Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
03.06.2015
Размер:
1.08 Mб
Скачать

Группировка. Пример 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

Соседние файлы в папке Управл_данными