我有一张收入表
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当我执行这个查询时
SELECT SUM(revenue),SUM(cost)
FROM revenue
GROUP BY revenue.title_id它会产生结果
title_id revenue cost
1 30 11
2 30 11
3 30 11
4 30 11这是可以的,现在我想将sum结果与另一个具有如下结构的表结合起来
title_id interest
1 10
2 10
3 10
4 10
1 20
2 20
3 20
4 20 当我像这样使用聚合函数执行join时
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 它会使结果加倍
title_id revenue cost interest
1 60 22 60
2 60 22 60
3 60 22 60
4 60 22 60我不明白为什么是双倍,请帮帮忙
发布于 2012-07-06 22:34:31
它加倍是因为你在基金和收入表中有重复的头衔。这将使其匹配的记录数成倍增加。如果您删除聚合函数并查看原始数据,则很容易看出这一点。See here
解决这个问题的方法是创建聚合的内联视图,并在这些结果上进行连接。
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 输出
| TITLE_ID | REVENUE | COST | INTEREST |
----------------------------------------
| 1 | 30 | 11 | 30 |
| 2 | 30 | 11 | 30 |
| 3 | 30 | 11 | 30 |
| 4 | 30 | 11 | 30 |发布于 2012-07-06 22:59:54
这样做的原因是,您已将该表与来自第二个表的第一个派生表联接,但没有对其进行分组。要解决此问题,请将第二个表(fund)分组,并使用LEFT JOIN将其与第一个派生表连接。
SELECT b.title_id,
b.TotalRevenue,
b.TotalCost,
d.TotalInterest
FROM
(
SELECT a.title_id,
SUM(a.revenue) TotalRevenue,
SUM(a.cost) TotalCost
FROM revenue a
GROUP BY a.title_id
) b LEFT JOIN
(
SELECT c.title_id,
SUM(a.interest) TotalInterest
FROM fund c
GROUP BY c.title_id
) d ON b.title_id = d.title_id发布于 2012-07-06 22:34:01
在收入表中,每个title_id都有两行。
https://stackoverflow.com/questions/11364162
复制相似问题