Занятие 19. Практикум 5
⚡ Кратко
Практикум закрепляет агрегаты, GROUP BY и HAVING на реальных данных таблицы products.
📖 Теоретическая база практикума
Занятие состоит из восьми задач, которые покрывают следующие темы:
1. Базовые агрегаты
Для вычисления итоговых значений по столбцу используются AVG, MIN, MAX и SUM:
SELECT AVG(standard_cost), MIN(standard_cost),
MAX(standard_cost), SUM(standard_cost)
FROM products;
2. Группировка с фильтром групп
GROUP BY объединяет строки, а HAVING отбирает только подходящие группы:
SELECT category, COUNT(id) AS product_count
FROM products
GROUP BY category
HAVING COUNT(id) >= 3;
3. Группировка по нескольким столбцам
Можно группировать сразу по двум и более столбцам:
SELECT supplier_ids, category, AVG(standard_cost) AS avg_cost
FROM products
GROUP BY supplier_ids, category;
4. Условные категории в GROUP BY
CASE внутри SELECT создаёт вычисляемую группу:
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), MIN(list_price), MAX(list_price)
FROM products
GROUP BY stock_level;
Проверить по документации: использование алиаса из CASE в GROUP BY работает в MySQL, но в PostgreSQL/SQL Server обычно требуется повторять выражение CASE целиком.
5. Производные показатели
Агрегат можно применить к выражению, например вычислить суммарную прибыль:
SELECT category, SUM(list_price - standard_cost) AS total_profit
FROM products
WHERE target_level > 40
GROUP BY category;