JOIN键中的重复值会影响返回的结果吗



我有两个查询如下所示。

查询1

SELECT a.utype, DATE_TRUNC(b.date, DAY) AS date, (b.noofspec)
FROM `table1`as a
JOIN  `table2` as b
ON a.joinkey = b.joinkey       
GROUP BY 1, 2, 3
ORDER BY 2;

查询2

SELECT a.utype, DATE_TRUNC(b.date, DAY) AS date, SUM(b.noofspec)
FROM `table1`as a
JOIN  `table2` as b
ON a.joinkey = b.joinkey       
GROUP BY 1, 2
ORDER BY 2;

我预计QUERY 1的(b.noofspec(会有一个与SUM((b.noofspec((值相同的TOTAL。然而,它返回了一个完全不同的值。

我的桌子看起来像这个

表B

noofspecs<17>
gameid日期id
12121-04-06 00:0150ID1
22121-04-06 00:0150ID2
32121-04-06 00:0158ID3
42121-04-06 00:01100ID4
52121-04-06 00:01555ID5
62121-04-06 00:0155ID6
72121-04-06 00:01ID7

您的两个查询非常不同;第一个查询将返回一组不同的值,第二个查询将求和一组不不同的

让我们用更简单的数据来演示:

A.X, A.Y
1, 100
2, 200
B.X
1
1
1
2
2

让我们加入表格:

SELECT A.X, A.Y, B.X
FROM A JOIN B ON A.X = B.X

结果:

1, 100, 1
1, 100, 1
1, 100, 1
2, 200, 2
2, 200, 2

前两列来自A,第三列来自B

加入B导致A的行重复。即使你没有选择B,它们仍然会重复;重复是由加入引起的

这一切都很好,直到你想总结Y

SELECT A.X, SUM(A.Y) FROM A JOIN B ON A.X = B.X GROUP BY A.X
1, 300
2, 400

重复包含在总和中

那么,为什么它与您的第一个查询不同呢?

您的第一个查询将所有列分组,有效地压缩了生成的重复

SELECT A.X, A.Y, B.X
FROM A JOIN B ON A.X = B.X 
GROUP BY A.X, A.Y, B.X

上面的select和from行是我第一次在这个答案中写的原始查询;它们生成5行、3行1100.1和2行2200,2

该组通过将它们压缩回只有唯一的行,因此Y的总和将非常不同,因为在总和中没有重复的值

相关内容

最新更新