为什么SQL中的分组GROUP BY需要使用SUN()或MAX()等聚合函数?

1
2
3
4
5
6
7
8
9
+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
+------+---------+-------+

上面这个表格,如果使用GROUP BY id会被分为三组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 1 | 8000 | Jan |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
+------+---------+-------+

+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 2 | 9000 | Jan |
+------+---------+-------+

+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 3 | 10000 | Feb |
+------+---------+-------+

此时在第一组中,有三条记录,也就是说有三个revenue。那么此时select id,revenue就无法判定应该取哪一个revenue,所以这样的操作在标准SQL中是不允许的,只能通过聚合函数来处理。