Тема: Бaза даних Access (проблема із sql-запитом)
Завдання: Створити запит - показати категорію, товарів якої в магазині найменше.
Маю таблиці виду:
Product:
IdProduct | Product's name | IdCategory | Price | Quantity | IdProducer
1 | xxxxxxxxxxxxxxx | 1 | xxxx | 5 | xxxxxxxxx
2 | xxxxxxxxxxxxxxx | 1 | xxxx | 10 | xxxxxxxxx
3 | xxxxxxxxxxxxxxx | 2 | xxxx | 4 | xxxxxxxxx
4 | xxxxxxxxxxxxxxx | 2 | xxxx | 7 | xxxxxxxxx
Category:
IdCategory | Category's name
1 | category 1
2 | category 2
Кількість товарів - Quantity
Отже, в результаті повинна отриматися category 2 (4 + 7 < 5 + 10)
Алгоритм такий:
шукаю суми товарів по категоріях, а тоді потрібно показати ту категорію, де ця сума найменша. Знайти суми вдалося, а ось вибрати рядок з найменшим значенням - ні (вилазить помилка)
Ось як намагаюсь це зробити:
SELECT Category.[Category's name] as [Category], SUM(Product.Quantity) as [Quantity]
FROM product, category
WHERE Product.Idcategory = Category.IdCategory
GROUP BY Category.[Category's name]
HAVING [Quantity]=MIN([Quantity]);
Трохи погугливши знайшла, що так звані "alias" у Access не дозволяють робити по них ще якісь операції. Тоді спробувала ось так:
SELECT Category.[Category's name] as [Category], SUM(Product.Quantity) as [Quantity]
FROM product, category
WHERE Product.Idcategory = Category.IdCategory
GROUP BY Category.[Category's name]
HAVING SUM(Product.Quantity)=MIN(SUM(Product.Quantity));
Так теж помилка - не можна використовувати min(sum).
Тоді вдалася до крайнощів - думала впорядкувати ці суми по зростанню і показати лише перший рядок (TOP 1):
SELECT TOP 1 Category.[Category's name] as [Category], SUM(Product.Quantity) as [Quantity]
FROM product, category
WHERE Product.Idcategory = Category.IdCategory
GROUP BY Category.[Category's name]
ORDER BY SUM(Product.Quantity);
Це працює, але:
1) запит негарний
2) у завданні було сказано використати group by i having
Допоможіть будь лаcка зробити "правильно".