Агрегатні функції

Основні агрегатні функції

ФункціяОписПриклад
COUNT()Кількість записівCOUNT(*)
SUM()Сума значеньSUM(price)
AVG()Середнє значенняAVG(age)
MIN()Мінімальне значенняMIN(price)
MAX()Максимальне значенняMAX(price)

COUNT - підрахунок

-- Кількість всіх користувачів
SELECT COUNT(*) FROM users;

-- Кількість унікальних категорій
SELECT COUNT(DISTINCT category) FROM products;

SUM - сума

-- Загальна сума замовлень
SELECT SUM(total) FROM orders;

-- Сума замовлень конкретного користувача
SELECT SUM(total) FROM orders WHERE user_id = 1;

AVG - середнє

-- Середній вік користувачів
SELECT AVG(age) FROM users;

-- Середня ціна товарів
SELECT AVG(price) FROM products;

MIN та MAX

-- Найдешевший та найдорожчий товар
SELECT MIN(price), MAX(price) FROM products;

-- Наймолодший та найстарший користувач
SELECT MIN(age), MAX(age) FROM users;

GROUP BY - групування

Групує записи для агрегації по категоріях:

-- Кількість товарів у кожній категорії
SELECT category, COUNT(*) AS count
FROM products
GROUP BY category;
-- Сума замовлень по користувачах
SELECT user_id, SUM(total) AS total_spent
FROM orders
GROUP BY user_id;

HAVING - фільтрація груп

WHERE фільтрує рядки, HAVING фільтрує групи:

-- Категорії з більш ніж 2 товарами
SELECT category, COUNT(*) AS count
FROM products
GROUP BY category
HAVING COUNT(*) > 2;
-- Користувачі, що витратили більше 10000
SELECT user_id, SUM(total) AS total_spent
FROM orders
GROUP BY user_id
HAVING SUM(total) > 10000;
Порядок виконання: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

Комбінування всього

SELECT
  u.name,
  COUNT(o.id) AS order_count,
  SUM(o.total) AS total_spent,
  AVG(o.total) AS avg_order
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 0
ORDER BY total_spent DESC;

Практика

Спробуй в SQL пісочниці:

SELECT COUNT(*) AS total_users
FROM users;
SELECT
    category,
    COUNT(*) AS product_count
FROM products
GROUP BY category;
SELECT
    AVG(price) AS average_price,
    MIN(price) AS min_price,
    MAX(price) AS max_price
FROM products;
SELECT
    user_id,
    SUM(total) AS total_spent
FROM orders
GROUP BY user_id
ORDER BY total_spent DESC;

Вітаємо!

Ти завершив базовий курс SQL!

Тепер ти знаєш:

  • SELECT, WHERE, ORDER BY, LIMIT
  • INSERT, UPDATE, DELETE
  • CREATE TABLE та типи даних
  • JOIN для об'єднання таблиць
  • Агрегатні функції та GROUP BY
Продовжити практику →