Skip to content

Instantly share code, notes, and snippets.

@hmel1990
Created February 17, 2025 07:38
Show Gist options
  • Save hmel1990/85a0f035c390f18aa2759662cf275108 to your computer and use it in GitHub Desktop.
Save hmel1990/85a0f035c390f18aa2759662cf275108 to your computer and use it in GitHub Desktop.
DZ GROUP BY HAVING
1. Показать товары, средняя цена продажи которых была больше 50 гривен
SELECT p.name
FROM Product p
JOIN Sale s ON s.id_product = p.id
GROUP BY p.name
HAVING AVG (s.price) > 50
2. Вывести количество товаров каждой категории, средняя цена поставки которых больше 100 гривен
SELECT c.name, COUNT(p.name) AS "количество товаров данной категории"
FROM Category c
JOIN Product p ON c.id = p.id_category
JOIN Delivery d ON d.id_product = p.id
GROUP BY c.name
HAVING AVG(d.price) > 100;
3. Показать категории "Фрукты" и "Конфеты", принадлежащие им товары, и общую сумму их продажи
============================= Вариант с HAVING ======================================
SELECT p.name, c.name AS "категория", SUM (s.price*s.quantity) AS "всего продано"
FROM Category c
JOIN Product p ON c.id = p.id_category
JOIN Sale s ON s.id_product = p.id
GROUP BY c.name, p.name
HAVING c.name LIKE '%фрукти%' OR c.name LIKE '%овоч%'
UNION ALL
SELECT 'Total:', NULL, SUM(s.price * s.quantity)
FROM Sale s
JOIN Product p ON s.id_product = p.id
JOIN Category c ON c.id = p.id_category
WHERE c.name LIKE '%фрукти%' OR c.name LIKE '%овоч%'
============================ Вариант с WHERE =======================================
SELECT p.name, c.name AS "категория", s.price*s.quantity AS "всего продано"
FROM Category c
JOIN Product p ON c.id = p.id_category
JOIN Sale s ON s.id_product = p.id
WHERE c.name LIKE '%фрукти%' OR c.name LIKE '%овоч%'
UNION ALL
SELECT 'Total:', NULL, SUM(s.price * s.quantity)
FROM Sale s
JOIN Product p ON s.id_product = p.id
JOIN Category c ON c.id = p.id_category
WHERE c.name LIKE '%фрукти%' OR c.name LIKE '%овоч%'
4. Показать информацию о производителе, его полном адресе, и количестве товаров, которые он выпускает.
Общая стоимость продаж товаров каждого производителя при этом должна быть от 500 до 2000 гривен
SELECT pr.name AS "производитель", CONCAT (ctr.name, ', ', r.name, ', ',ct.name, ', ',a.street) AS "адрес производителя", COUNT(p.name) AS "количество товаров"
FROM Product p
JOIN Producer pr ON p.id_producer = pr.id
JOIN Address a ON pr.id_address = a.id
JOIN City ct ON a.id_city = ct.id
JOIN Region r ON ct.id_region = r.id
JOIN Country ctr ON r.id_country = ctr.id
JOIN Sale s ON s.id_product = p.id
GROUP BY pr.name, ctr.name, r.name, ct.name, a.street
HAVING SUM (s.price * s.quantity) BETWEEN 500 AND 2000
5. Показать категорию, товаров которой в магазине меньше всего
SELECT TOP 1 c.name, COUNT(p.name) AS "количество товаров данной категории"
FROM Category c
JOIN Product p ON c.id = p.id_category
GROUP BY c.name
ORDER BY 2
6. Показать количество товаров каждой категории, при этом учитывая только те товары, стоимость поставки которых
превышала 400 гривен. Условие: выведенная информация касается только трёх определённых поставщиков
SELECT c.name, COUNT(p.name) AS "количество товаров данной категории"
FROM Category c
JOIN Product p ON c.id = p.id_category
JOIN Delivery d ON d.id_product = p.id
JOIN Supplier s ON d.id_supplier = s.id
WHERE s.name LIKE '%Картофка%' OR s.name LIKE '%Котигорошко%' OR s.name LIKE '%Швидко%'
GROUP BY c.name
HAVING SUM (d.quantity*d.price) > 400
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment