Как использовать HAVING с агрегатными функциями в SQL?

Опубликовано: 1 Сентября, 2022

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 раза.