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

标签 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;

所以上面的两个查询工作正常。每个人都会发现在产品或理发上的总花费,以及按性别分组的总花费,从而分别给出男性和女性在剪发和产品上的总花费。但是我需要以某种方式将这些组合起来,以便我可以显示性别( 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/

相关文章:

c# - C# 中的 Firebird 连接

mysql - 更新集不相应地工作

MySQL 交叉引用不同产品

MySQL:通过多个值的分组获取具有最高时间戳的行

MySQL:HAVING COUNT 'exact' 的问题,而不是 'at least'

mysql - COUNT(*) WHERE 与 SELECT(*) WHERE 性能对比

mysql - 在子查询 where 子句中引用列

java - 我应该修改 JPA 生成的 bean 还是这是不好的做法?

ios - 核心数据 - 预填充数据时模型不兼容

mysql - memcache 会帮助处理昂贵的 MySQL 查询吗? (Drupal 站点)