将SQL查询限制为查询未使用的表中的某些字段

时间:2010-07-07 07:02:10

标签: sql mysql

我有一个产品表,其字段为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)

我如何将其限制在某些类别?

要从食品和饮料等产品中定义某些类别,并且在我的计算中仅包含这些类别的产品?

4 个答案:

答案 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)