Как использовать HAVING с агрегатными функциями в SQL?
SQL предоставляет множество встроенных функций для выполнения задач. Существует 4 типа функций: функции даты, функции символов, числовые функции и функции агрегирования.
Здесь мы рассмотрим агрегатные функции и способы их использования с ключевым словом HAVING .
Агрегатные функции — это встроенные в базу данных функции, которые воздействуют на несколько строк таблицы и выдают один результат. Есть в основном 5 агрегатных функций, которые мы часто используем в SQL. Агрегатные функции детерминированы. Общие агрегатные функции следующие:
- COUNT() : вычисляет общее количество строк в таблице, возвращает одно значение.
- AVG() : вычисляет среднее значение столбца, к которому он применяется.
- MIN() : возвращает минимальное значение в столбце, к которому оно применяется.
- MAX() : возвращает максимальное значение в столбце, к которому оно применяется.
- SUM() : возвращает сумму всех значений столбца, к которому она применяется.
Когда использовать ключевое слово HAVING ?
Ключевое слово WHERE, которое мы использовали для фильтрации данных по заданному условию, хорошо работает с операторами SQL, такими как арифметический оператор, оператор сравнения и т. д., но когда дело доходит до агрегатных функций, мы используем ключевое слово HAVING для сортировки данных по заданному условию. Предложение GROUP BY также используется с ключевым словом HAVING.
Синтаксис:
SELECT column_name(s) FROM table_name WHERE condition GROUP BY expression HAVING condition ORDER BY expression LIMIT value;
Чтобы использовать SUM() с предложением Have:
Шаг 1: Создайте базу данных
Запрос:
CREATE DATABASE database_name;
Шаг 2: Создайте таблицу с именем products.
Запрос:
CREATE TABLE PRODUCTS(product_id int primary key, product_name varchar(45), product_cost float);
Шаг 3: Вставьте значения в таблицу
Запрос:
INSERT INTO PRODUCTS VALUES (1001, "Colgate Toothpaste", 2.25), (1002 "T-Shirt", 5), (1003, "Jeans", 6.5), (1004, "Shorts", 4.5), (1005, "Sneakers", 8.99), (1007, "Mouthwash", 3.35), (1008, "Denim Jeans", 8.99), (1009, "Synsodyne Toothpaste", 3.35);
Шаг 4: Теперь давайте посмотрим содержимое таблицы продуктов.
Запрос:
SELECT * FROM products;
Выход:
Шаг 5: Теперь наша задача — напечатать все те товары, сумма стоимости которых больше 3,50.
Запрос:
SELECT product_name, product_cost FROM products GROUP BY product_name, product_cost HAVING SUM(product_cost) > 3.5 ORDER BY product_cost;
Выход:
Здесь отображаются только те товары, стоимость которых больше 3,5
Чтобы использовать MAX() и MIN() с предложением Have
Мы используем ту же таблицу продуктов, что и в предыдущем примере.
Наша задача — найти наименования товаров, максимальная цена которых больше 7, и те наименования товаров, минимальная цена которых меньше 3.
Запрос:
SELECT * FROM products;
ЗАПРОС 1 (чтобы найти товары с максимальной ценой выше 7)
SELECT product_name FROM products GROUP BY product_name HAVING MAX(product_cost) > 7;
ВЫХОД
ЗАПРОС 2(Чтобы найти товары с минимальной ценой меньше 3)
SELECT product_name FROM products GROUP BY product_name HAVING MIN(product_cost) < 3;
Выход:
Чтобы использовать AVG() с предложением Have
Мы будем использовать таблицу продуктов, чтобы продемонстрировать эту часть.
Запрос:
SELECT * FROM products;
Теперь мы хотим выбрать те товары, цена которых больше, чем средняя цена таблицы товаров.
Запрос:
SELECT product_name FROM products GROUP BY product_name HAVING AVG(product_cost) > (SELECT AVG(product_cost) FROM products);
Выход:
Здесь присутствуют только те товары, средняя цена которых больше, чем средняя цена таблицы продуктов.
Чтобы использовать Count() с предложением Have
Шаг 1: Мы создадим базу данных.
Запрос:
CREATE DATABASE database_name;
Шаг 2: Создайте вход в таблицу.
Запрос:
CREATE TABLE login(signin_id int PRIMARY KEY ,customer_id int, date_login date);
Шаг 3: Вставьте значения в таблицу.
Запрос:
INSERT INTO login values (1, 121, "2021-10-21"), (2, 135, "2021-05-25"), (3, 314, "2021-03-13"), (4, 245, "2021-07-19"), (5, 672, "2021-09-23"), (6, 135, "2021-06-12"), (7,120,"2021-06-14"), (8, 121, "2021-04-24"), (9,135, "2021-06-15"), (10, 984, "2021-01-30");
Шаг 4: Отобразите содержимое таблицы.
Запрос:
SELECT * FROM login;
Выход:
Теперь мы хотим отобразить те идентификаторы клиентов, которые встречались как минимум 2 раза.
Запрос:
SELECT customer_id FROM login GROUP BY customer_id HAVING COUNT(customer_id) >=2 ;
Выход:
Здесь customer_id 121 и 135 встречались как минимум 2 раза.