好的,所以我已经尝试让这个查询工作几个小时了,但我似乎做的任何事情都不会得到我想要的结果。
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;
所以上面的两个查询工作正常。每个人都会发现在产品或理发上的总花费,以及按性别分组的总花费,从而分别给出男性和女性在剪发和产品上的总花费。但是我需要以某种方式将这些组合起来,以便我可以显示性别( s) 在产品上的花费比在理发上的花费更多。
如有任何帮助,我们将不胜感激。
P.S 希望这个问题足够清楚。如果没有,我会尝试详细说明。
最佳答案
将两个查询结果合并为的另一种方式
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 column(category_id primary key,...)
Table2 column(category_id foreign key,...)
然后你可以很容易地使用USING()
SELECT * FROM
Table1
JOIN Table2
USING(category_id )
但是如果您有不同的关联名称,那么您需要使用 ON()
子句
关于mysql - SQL查询,子查询减去子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23453633/