Занятие 20. Summary session 5
⚡ Кратко
Повторяем агрегаты, 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-запроса
FROM— выбор таблиц.WHERE— фильтрация строк.GROUP BY— группировка.HAVING— фильтрация групп.SELECT— выбор столбцов.ORDER BY— сортировка.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;