我有三个表t1,t2,t3。 T3与t2和t2与t1有关。 我有这个选择
select t1.id,sum(t3.column)
from
t1
join t2 on t2.fk = t1.id
join t3 on t3.fk = t2.id
where t1.column = 'something'
group by t1.id,t3.fk;
没有组选择有120行。随着
group by t3.fk
它有5行。
与
group by t1.id it have 1 row
这仍然可以。但如果我有
group by t3.fk,t1.id
它有5行。我预计只有一排。
示例数据:
t1.id |t1.some_column
5 |"some data"
t2.id |t2.fk |t2.some_column
1 |5 |"a"
2 |5 |"b"
3 |5 |"c"
4 |5 |"d"
5 |5 |"e"
t3.id |t3.fk |t3.column
1 |1 |1
......................
24 |2 |1
......................
48 |3 |1
......................
72 |3 |1
......................
96 |3 |1
......................
选择退货:
t1.id |sum(t3.column)
5 |24
5 |24
5 |24
5 |24
5 |24
我无法理解为什么当我按t1.id分组时,有5行具有相同的t1.id。我知道如果它只返回一行,我会丢失关于总和的信息,但它也会在选择中没有总和。我知道这个选择是愚蠢的,没有任何意义,但它可能有助于我更好地理解。
答案 0 :(得分:1)
我相信你没有向我们提供足够的信息,因为结果毫无意义。
group by t2.fk
返回5行表示有五个不同的t2.fk
值group by t1.id
返回1行表示只有一个不同的t1.id
值。t2.fk = t1.id
,这意味着t2.fk
的不同值和t1.id
的不同值的数量应该相同,这与之前的结果相矛盾。< / LI>
对不起,你是对的。它应该是t3.fk而不是t2.fk.我编辑它 并添加一些数据。 - CoCumis
没有什么难以理解的。假设有t3.fk
的5个唯一值,例如[1,2,3,4,5]和t1.id
的1个唯一值,如[1],{{1}的组合应该产生5种独特的组合,例如[(1,1),(2,1),(3,1),(4,1),(5,1)]。所以返回5行是预期的。