正常情况下可以在 select 内嵌套子查询作为结果集的字段,示例如下:

select id,name,(SELECT COUNT(id) FROM records WHERE user_id = users.id
) AS box_count FROM users 
where user_id = 9527;

但如果需要子查询的多个字段返回,此时放在 select 是不行的:

SELECT SUM(money) as total_money, SUM(profit) as total_profit FROM records WHERE user_id = 9527;

当然可以将其拆分成两个(多个)子查询,但那样感觉会降低查询效率。

百度找到了一个解决方法,就是使用 join 替换子查询,将两个结果集放一起。

union 是不行的,union 是将相同字段的结果集放在一起,会增加记录数。

最终的实现:

select id,name,res.total_money,res.total_profit FROM users
JOIN (
SELECT SUM(money) as total_money, SUM(profit) as total_profit FROM records
) AS res ON res.user_id = users.id
where user_id = 9527;