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

用户名

好的,所以我已经尝试使此查询工作几个小时了,但是我似乎没做任何事情都会得到我想要的结果。

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)在产品上花的钱比在发型上花的钱多。

任何帮助,将不胜感激。

PS希望这个问题很清楚。如果不是,我会尽力说明。

哈里德·朱奈德(M Khalid Junaid)

另一种方式可以将两个查询结果合并为

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()语法不同,则需要使用语法

喜欢

表1列(category_id主键,...)

Table2列(category_id外键,...)

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

SELECT * FROM
Table1 
JOIN Table2 
USING(category_id )

但是,如果您要使用其他名称进行关联,则需要使用ON()子句

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章