带有多个级别连接的SQL sum()

时间:2010-11-11 23:36:32

标签: sql

假设我有以下表格关系(通过两端存在的密钥)

table a -> table b
table b -> table c
table c -> table d
table d -> table e
table e -> table f

我希望按table a上的键和来自table f的sum()值进行分组,就好像两个表都是直接连接一样。

问题在于,如果我这样做,信息将被复制为来自 - >的所有关系。 b - > c - > d - > e - > f将重复(正如Andomar所说:一些信息重复,因为从A到F有多条路径)

有没有解决方法,或者是我唯一的选择来创建一个包含table a - >的中间表table f关系?

详细说明:

Table a
id1 | id2

Table b
id2 | id3

Table c
id3 | value

select a.id1, sum(value) from a 
inner join b on a.id2 = b.id2
inner join c on b.id3 = c.id3
group by a.id1

数据示例:

进行加入,关系是:

a b c value
1 2 2 20
1 3 2 20
1 4 2 20

如果我做总和(),我会得到60但我想得到20

由于

1 个答案:

答案 0 :(得分:1)

我假设某些信息重复,因为从A到F有多条路由。如果F中有唯一键,您可以使用子查询取消复制路径:

SELECT  SubQuery.AValue, sum(SubQuery.FValue)
FROM    (
        SELECT a.value as AValue, f.key, f.value as FValue
        FROM a
        INNER JOIN b ON b.key = a.key
        INNER JOIN c ON c.key = b.key
        INNER JOIN d ON d.key = c.key
        INNER JOIN e ON e.key = d.key
        INNER JOIN f ON f.key = e.key
        GROUP BY a.value, f.key, f.value
        ) as SubQuery
GROUP BY SubQuery.AValue

子查询确保F中的每一行只计算一次。