SQL查询,子查询减去子查询?

时间:2014-05-04 07:13:46

标签: mysql sql database

好的,所以我一直试图让这个查询现在工作几个小时,但我似乎没有做任何事情会让我得到我想要的结果。

SELECT COALESCE(SUM(ps.cost), 0) AS ps_total
FROM Customers c
    LEFT JOIN ProductSales ps ON c.customer_ID = ps.customer_ID
GROUP BY c.sex;

SELECT COALESCE(SUM(hc.cost), 0) AS hc_total
FROM Customers c
    LEFT JOIN HairCuts hc ON c.customer_ID = hc.customer_ID
GROUP BY c.sex;

所以上面两个查询工作正常。每个人都可以通过gener找到花在产品或剪发和团体上的总量,从而分别为男性和女性提供切割和产品的总花费。然而,我需要以某种方式将这些组合在一起以便能够显示性别( s)在产品上花费比在理发上花费更多。

非常感谢任何帮助。

P.S希望这个问题很清楚。如果不是,请尝试详细说明。

1 个答案:

答案 0 :(得分:0)

另一种可以将您的查询结果加入

的方法
SELECT  t1.sex,
COALESCE(t1.ps_total - t2.hc_total,0)  AS `difference`
FROM 
(SELECT COALESCE(SUM(ps.cost), 0) AS ps_total ,c.sex
FROM Customers c
    LEFT JOIN ProductSales ps ON c.customer_ID = ps.customer_ID
GROUP BY c.sex) t1
LEFT JOIN 
(SELECT COALESCE(SUM(hc.cost), 0) AS hc_total ,c.sex
FROM Customers c
    LEFT JOIN HairCuts hc ON c.customer_ID = hc.customer_ID
GROUP BY c.sex) t2
USING(sex)
HAVING difference > 0

根据评论进行修改

我使用了ON()子句的简短语法,例如USING(sex) = ON(t1.sex=t2.sex),如果两个表中的列名相同,则可以使用USING()有不同然后你需要使用ON()语法

喜欢

  

Table1列(category_id主键,...)

     

表2列(category_id外键,...)

然后您可以轻松使用USING()

SELECT * FROM
Table1 
JOIN Table2 
USING(category_id )

但是如果您有关联的不同名称,那么您需要使用ON()子句