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

💻 Примеры: Практикум 5

⚡ Кратко

Примеры запросов к products: агрегаты, группировка, фильтры.

Пример 1. Базовые статистики

SELECT AVG(standard_cost) AS avg_cost,
       MIN(standard_cost) AS min_cost,
       MAX(standard_cost) AS max_cost,
       SUM(standard_cost) AS total_cost
FROM products;

Пример 2. Категории с количеством товаров

SELECT category, COUNT(id) AS product_count
FROM products
GROUP BY category
HAVING COUNT(id) >= 3
ORDER BY product_count DESC;

Пример 3. Средняя себестоимость по поставщику и категории

SELECT supplier_ids, category, AVG(standard_cost) AS avg_cost
FROM products
GROUP BY supplier_ids, category
ORDER BY avg_cost DESC;

Пример 4. Подсчёт пропусков

SELECT COUNT(id) AS missing_reorder
FROM products
WHERE minimum_reorder_quantity IS NULL;

Пример 5. Уникальные категории

SELECT COUNT(DISTINCT category) AS unique_categories
FROM products;

Пример 6. Группировка по уровню запаса

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,
       MIN(list_price) AS min_price,
       MAX(list_price) AS max_price
FROM products
GROUP BY stock_level
ORDER BY avg_price DESC;

Проверить по документации: группировка по алиасу stock_level поддерживается в MySQL, но в других СУБД может потребоваться повторять выражение CASE в GROUP BY.

Пример 7. Средняя себестоимость товаров в коробках

SELECT AVG(standard_cost) AS avg_box_cost
FROM products
WHERE LOWER(quantity_per_unit) LIKE '%box%';

Пример 8. Суммарная прибыль по категориям

SELECT category,
       SUM(list_price - standard_cost) AS total_profit
FROM products
WHERE target_level > 40
GROUP BY category
ORDER BY total_profit DESC;