Освоение функций агрегирования SQL: Полное руководство с примерами

Функции агрегирования данных играют важную роль в SQL, когда дело доходит до обобщения и анализа данных. Они позволяют нам вычислять статистические показатели, выполнять вычисления по группам данных и получать значимую информацию.

В этой статье мы рассмотрим 10 наиболее часто используемых функций агрегации MYSQL, таких как COUNT, SUM, AVG, MIN, MAX, ROUND, GROUP BY, WITH ROLLUP, LIMIT, HAVING с практическими примерами.

COUNT

Он возвращает количество ненулевых значений в столбце или количество строк в таблице.

-- Сколько строк в таблице авторов?

SELECT COUNT(*) AS total_rows
FROM authors;


-- Сколько авторов в наборе данных?

SELECT COUNT(DISTINCT au_id) AS number_of_authors
FROM authors; 


-- Сколько авторов живет в Сан-Хосе или Солт-Лейк-Сити?

SELECT COUNT(au_id)
FROM authors
WHERE city IN ("San Jose", "Salt Lake City");


-- Сколько магазинов находится в штате Калифорния (Калифорния)?

SELECT COUNT(DISTINCT stor_id) AS "number of stores in CA"
FROM stores
WHERE state = "CA";

SUM

Он вычисляет сумму значений в столбце.

-- Узнайте общий объем продаж по количеству.

SELECT SUM(qty) AS sales_quantity
FROM sales;


-- Узнайте объем продаж по количеству для каждого магазина, затем отсортируйте в порядке убывания.

SELECT stor_id, SUM(qty) AS sales_quantity
FROM sales
GROUP BY stor_id
ORDER BY SUM(qty) DESC;

AVG

Он вычисляет среднее значение числового столбца.

-- Отображение количества, среднего значения и суммы количеств в таблице продаж.

SELECT COUNT(qty), AVG(qty) , SUM(qty)
FROM sales;


-- Узнайте, сколько книг есть у каждого издательства и их среднюю цену на книги.

SELECT pub_id, COUNT(title_id), AVG(price)
FROM titles
GROUP BY pub_id
ORDER BY COUNT(title_id) DESC;

MIN

Извлекает минимальное значение из столбца.

-- Узнайте минимальную цену на книги для каждого издательства.

SELECT pub_id,  MIN(price) AS minimum_price
FROM titles
GROUP BY pub_id;

MAX

Извлекает максимальное значение из столбца.

-- Узнайте максимальную цену книг для каждого издательства.

SELECT pub_id, MAX(price) AS maximum_price
FROM titles
GROUP BY pub_id;

ROUND

Используется для округления числового значения до заданного числа знаков после запятой.

-- Узнайте среднюю цену книг для каждого издательства, укажите их с двумя знаками после запятой.

SELECT pub_id,  ROUND(AVG(price),2) AS average_book_price
FROM titles
GROUP BY pub_id;

GROUP BY

Группирует строки на основе одного или нескольких столбцов и выполняет агрегирование по каждой группе.

-- Узнайте общий объем продаж с начала года для каждого издателя, затем отсортируйте в порядке убывания.

SELECT pub_id,  SUM(ytd_sales)
FROM titles
GROUP BY pub_id
ORDER BY SUM(ytd_sales) DESC;


-- Узнайте общий объем продаж с начала года для каждого издателя и каждого названия, затем отсортируйте в порядке убывания.

SELECT pub_id,  title,  SUM(ytd_sales)
FROM titles
GROUP BY pub_id, title;


WITH ROLLUP

Он генерирует промежуточные итоги и общие итоговые суммы на нескольких уровнях в результате запроса.

Обратите внимание, что значения "NULL" в результате представляют строки промежуточных итогов и общих итоговых сумм.

-- Узнайте среднюю цену для каждого издателя и каждого названия, затем отсортируйте в порядке убывания. 
-- Кроме того, отобразите промежуточные итоги и общую сумму, используя сводный отчет.

SELECT pub_id, title,  SUM(ytd_sales)
FROM titles
GROUP BY pub_id, title
WITH ROLLUP;

LIMIT

Он ограничивает количество строк, возвращаемых запросом.

-- Узнайте топ-3 магазинов с наибольшим объемом продаж.

SELECT stor_id, SUM(qty)
FROM sales
GROUP BY stor_id
ORDER BY SUM(qty) DESC
LIMIT 3;

HAVING

Фильтрует строки на основе заданных условий с помощью предложения GROUP BY. Предложение HAVING используется с агрегатными функциями, такими как SUM, COUNT, AVG.


Это похоже на предложение WHERE, но с предложением WHERE мы не можем использовать агрегатные функции!


-- Выберите магазины с количеством продаж более 50.

SELECT stor_id, SUM(qty)
FROM sales
GROUP BY stor_id
HAVING SUM(qty) > 50;


-- Выберите магазины с количеством продаж более 50, затем отсортируйте их в порядке убывания.

SELECT stor_id, SUM(qty)
FROM sales
GROUP BY stor_id
HAVING SUM(qty) > 50
ORDER BY SUM(qty) DESC;

Заключение

Функции агрегирования SQL имеют решающее значение для анализа данных и составления отчетов. Они помогают обобщать данные и вычислять показатели, предоставляя ценную информацию для принятия решений. Освоение этих функций позволит вам выполнять мощный анализ данных в SQL. Продолжайте практиковаться и изучать, чтобы улучшить свои навыки работы с SQL. Спасибо вам за чтение!