17:20
Фильтрация групп данных: Команда HAVING.

Курс по SQL

Урок 22: Фильтрация групп данных: Команда HAVING

В этом уроке мы рассмотрим команду HAVING, которая используется для фильтрации групп данных, полученных после группировки с использованием команды GROUP BY. Мы изучим синтаксис и примеры использования команды HAVING.

Использование команды HAVING

Команда HAVING используется для фильтрации групп данных на основе агрегатных функций. Это аналог команды WHERE, но применяется к результатам, полученным после группировки. Рассмотрим пример выборки классов, в которых количество студентов больше 15:

SELECT Класс, COUNT(*) AS КоличествоСтудентов
FROM Студенты
GROUP BY Класс
HAVING COUNT(*) > 15;

Результат выполнения

Класс КоличествоСтудентов
10-А 20
10-Б 18

Комбинирование с GROUP BY и агрегатными функциями

Команда HAVING может быть использована вместе с различными агрегатными функциями для фильтрации данных по различным критериям. Рассмотрим пример выборки клиентов, у которых общая сумма заказов превышает 200:

SELECT КлиентID, SUM(Сумма) AS ОбщаяСумма
FROM Заказы
GROUP BY КлиентID
HAVING SUM(Сумма) > 200;

Результат выполнения

КлиентID ОбщаяСумма
1 300.00

Использование HAVING с несколькими условиями

Команда HAVING поддерживает использование нескольких условий, объединенных логическими операторами AND и OR. Рассмотрим пример выборки классов, в которых количество студентов больше 15 и средний возраст студентов меньше 18 лет:

SELECT Класс, COUNT(*) AS КоличествоСтудентов, AVG(Возраст) AS СреднийВозраст
FROM Студенты
GROUP BY Класс
HAVING COUNT(*) > 15 AND AVG(Возраст) < 18;

Результат выполнения

Класс КоличествоСтудентов СреднийВозраст
10-А 20 17.5

Использование HAVING без GROUP BY

Команда HAVING может использоваться без команды GROUP BY для фильтрации результатов, возвращаемых агрегатными функциями. Рассмотрим пример выборки клиентов, у которых общая сумма заказов превышает 200:

SELECT КлиентID, SUM(Сумма) AS ОбщаяСумма
FROM Заказы
HAVING SUM(Сумма) > 200;

Результат выполнения

КлиентID ОбщаяСумма
1 300.00

Упражнения

Упражнение 1: Фильтрация классов по количеству студентов

Выберите классы, в которых количество студентов больше 10.

Решение:

SELECT Класс, COUNT(*) AS КоличествоСтудентов
FROM Студенты
GROUP BY Класс
HAVING COUNT(*) > 10;

Объяснение: Мы использовали команду GROUP BY для группировки студентов по классам и команду HAVING для фильтрации классов с количеством студентов больше 10.

Упражнение 2: Фильтрация клиентов по общей сумме заказов

Выберите клиентов, у которых общая сумма заказов превышает 500.

Решение:

SELECT КлиентID, SUM(Сумма) AS ОбщаяСумма
FROM Заказы
GROUP BY КлиентID
HAVING SUM(Сумма) > 500;

Объяснение: Мы использовали команду GROUP BY для группировки заказов по клиентам и команду HAVING для фильтрации клиентов с общей суммой заказов больше 500.

Упражнение 3: Фильтрация продуктов по средней цене

Выберите категории продуктов, в которых средняя цена продуктов превышает 100.

Решение:

SELECT Категория, AVG(Цена) AS СредняяЦена
FROM Продукты
GROUP BY Категория
HAVING AVG(Цена) > 100;

Объяснение: Мы использовали команду GROUP BY для группировки продуктов по категориям и команду HAVING для фильтрации категорий с средней ценой продуктов больше 100.

Упражнение 4: Фильтрация студентов по количеству и среднему возрасту

Выберите классы, в которых количество студентов больше 15 и средний возраст студентов меньше 18 лет.

Решение:

SELECT Класс, COUNT(*) AS КоличествоСтудентов, AVG(Возраст) AS СреднийВозраст
FROM Студенты
GROUP BY Класс
HAVING COUNT(*) > 15 AND AVG(Возраст) < 18;

Объяснение: Мы использовали команду GROUP BY для группировки студентов по классам и команду HAVING для фильтрации классов с количеством студентов больше 15 и средней возрастом студентов меньше 18 лет.

Категория: SQL | Просмотров: 87 | Добавил: Admin | Рейтинг: 1.0/1
Всего комментариев: 0
Имя *:
Email *:
Код *: