У меня есть таблица продуктов с полями productname, category и cost типа varchar, varchar и double.
Затем у меня есть таблица продаж с полями productname, cost и saledate, типа varchar, double и date.
Наконец, у меня есть таблица покупок с покупкой, стоимостью и покупкой полей типа varchar, double и date.
Я хочу рассчитать количество продаж для определенных дат для определенных категорий.
У меня есть на данный момент этот запрос, чтобы показать ежемесячные итоги за год:
SELECT month(saledate), SUM(cost)
FROM sales
GROUP BY month(saledate)
UNION ALL
SELECT month(purchasedate), SUM(cost)
FROM purchases
GROUP BY month(purchasedate)
Как я могу ограничить его определенными категориями?
Определить определенные категории из продуктов, таких как еда и напитки, и включать только мои данные в эти категории?
SELECT month(saledate), SUM(sales.cost)
FROM sales, products
WHERE sales.productname=products.productname
AND category='food'
GROUP BY month(saledate)
UNION ALL
SELECT month(purchasedate), SUM(purchases.cost)
FROM purchases, products
WHERE purchases.productname=products.productname
AND category='food'
GROUP BY month(purchasedate)
Таблица должна быть частью инструкции SQL, чтобы ограничить ряды результатов, основанные на некотором сохраненном в ней значении.
Если вы хотите, чтобы ваш результат вычисления не включал эти категории, вы должны использовать WHERE.
иначе, используя HAVING
просто добавьте предложение WHERE, подобное этому:
[...] WHERE products.category = 'food' ИЛИ prodcuts.category = 'drink' [...]
Я был бы склонен использовать подзапрос, а не соединение, и я думаю, что вы хотите его в обеих частях профсоюза. Но Borealid ответ довольно прост. Разница - это вопрос вкуса.
SELECT month(saledate),
SUM(sales.cost)
FROM sales, products
WHERE EXISTS (SELECT *
FROM products
WHERE purchases.productname = products.productname AND
category = 'food')
GROUP BY month(saledate)
UNION ALL
SELECT month(purchasedate),
SUM(purchases.cost)
FROM purchases, products
WHERE EXISTS (SELECT *
FROM products
WHERE purchases.productname = products.productname AND
category = 'food')
GROUP BY month(purchasedate)