1 Востаннє редагувалося pika1989 (26.05.2016 19:42:26)

Тема: Б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ка зробити "правильно".

2

Re: Бaза даних Access (проблема із sql-запитом)

Вивчіть хоча б базові поняття в SQL, це досить просто зробити. Після цього вам навряд чи захочеться, наприклад, в having тулити функції для групування.