Ars*_*Ali 7 mysql sql join group-by aggregate-functions
我有一张收入表
title_id revenue cost
1 10 5
2 10 5
3 10 5
4 10 5
1 20 6
2 20 6
3 20 6
4 20 6
Run Code Online (Sandbox Code Playgroud)
当我执行此查询
SELECT SUM(revenue),SUM(cost)
FROM revenue
GROUP BY revenue.title_id
Run Code Online (Sandbox Code Playgroud)
它会产生结果
title_id revenue cost
1 30 11
2 30 11
3 30 11
4 30 11
Run Code Online (Sandbox Code Playgroud)
这是好的,现在我想将sum结果与另一个具有这样结构的表结合起来
title_id interest
1 10
2 10
3 10
4 10
1 20
2 20
3 20
4 20
Run Code Online (Sandbox Code Playgroud)
当我用这样的聚合函数执行连接时
SELECT SUM(revenue),SUM(cost),SUM(interest)
FROM revenue
LEFT JOIN fund ON revenue.title_id = fund.title_id
GROUP BY revenue.title_id,fund.title_id
Run Code Online (Sandbox Code Playgroud)
结果加倍
title_id revenue cost interest
1 60 22 60
2 60 22 60
3 60 22 60
4 60 22 60
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它加倍,请帮忙
Con*_*rix 13
它加倍,因为你在基金和收入表中重复了头衔.这会使匹配的记录数倍增.如果删除聚合函数并查看原始数据,则很容易看到.看这里
解决此问题的方法是创建聚合的内联视图并加入这些结果.
SELECT R.title_id,
R.revenue,
R.cost,
F.interest
FROM (SELECT title_id,
Sum(revenue) revenue,
Sum(cost) cost
FROM revenue
GROUP BY revenue.title_id) r
LEFT JOIN (SELECT title_id,
Sum(interest) interest
FROM fund
GROUP BY title_id) f
ON r.title_id = F.title_id
Run Code Online (Sandbox Code Playgroud)
产量
| TITLE_ID | REVENUE | COST | INTEREST |
----------------------------------------
| 1 | 30 | 11 | 30 |
| 2 | 30 | 11 | 30 |
| 3 | 30 | 11 | 30 |
| 4 | 30 | 11 | 30 |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7566 次 |
| 最近记录: |