我有一个产品表,其字段为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)
我如何将其限制在某些类别?
要从食品和饮料等产品中定义某些类别,并且在我的计算中仅包含这些类别的产品?
答案 0 :(得分:3)
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语句的一部分,以便根据其中保存的某些值来限制结果集行。
答案 1 :(得分:1)
只需添加一个像这样的WHERE子句:
[...] 在哪里products.category ='food'或prodcuts.category ='drink' [...]
答案 2 :(得分:1)
如果您希望计算结果不包含这些类别,则应使用WHERE。
否则,使用HAVING
答案 3 :(得分:0)
我倾向于使用子查询而不是连接,我认为你想在联合的两个部分中使用它。但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)