← К оглавлению занятия

Занятие 20. Summary session 5

📁 Блок: SQL / MySQL / Повторение ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#count #distinct #sum #avg #min #max #group_concat #group #by #having #where #case

⚡ Кратко

Повторяем агрегаты, GROUP BY, HAVING и порядок выполнения запроса.

📖 Агрегация

Агрегация — объединение данных для получения общего представления. Агрегирующие функции вычисляют одно значение по набору строк:

  • COUNT(*) — все строки.
  • COUNT(column) — строки без NULL.
  • SUM(column) — сумма (числа).
  • AVG(column) — среднее.
  • MIN(column) / MAX(column) — минимум и максимум.
  • GROUP_CONCAT(column) — объединение строк (MySQL).

Агрегатные функции игнорируют NULL, кроме COUNT(*). Внутри агрегатов можно использовать DISTINCT.

📖 GROUP BY

GROUP BY объединяет строки с одинаковыми значениями в указанных столбцах. Все неагрегированные столбцы в SELECT должны быть перечислены в GROUP BY.

SELECT category, COUNT(id) AS cnt
FROM products
GROUP BY category;

📖 WHERE vs HAVING

ОператорЭтапМожет использовать агрегаты
WHEREДо группировкиНет
HAVINGПосле группировкиДа

📖 Порядок выполнения SQL-запроса

  1. FROM — выбор таблиц.
  2. WHERE — фильтрация строк.
  3. GROUP BY — группировка.
  4. HAVING — фильтрация групп.
  5. SELECT — выбор столбцов.
  6. ORDER BY — сортировка.
  7. LIMIT — ограничение строк.

📖 CASE в агрегации

CASE позволяет создавать категории прямо в запросе:

SELECT CASE
         WHEN reorder_level < 10 THEN 'low'
         WHEN reorder_level BETWEEN 10 AND 20 THEN 'medium'
         ELSE 'high'
       END AS stock_level,
       AVG(list_price) AS avg_price
FROM products
GROUP BY stock_level;