sql中有关group by 有一些误解,比如下面的一个场景:表名,water_station
id | station | level | time |
1 | 庐山 | 100 | 2021-08-02 14:30:20 |
2 | 花园口 | 110 | 2021-08-02 14:30:20 |
3 | 花园口 | 110.2 | 2021-08-01 9:30:20 |
4 | 庐山 | 100.1 | 2021-08-01 9:30:20 |
在这样的一个场景下,如果想得到庐山站的最新时间的水位,很多时候会有一个错觉,这个错觉就是只要在水文站上进行分组就好,类似如下的sql
select station, max(time), level from water_station group by station having station = '庐山'
虽然这样的sql在mysql里是不会报错的,但是其实验证了就知道了,这里的level是不准的;这里的level其实和分组函数中的一点关系都没有;这样的sql在某些dbms中会报错。因为group by 的字段,其他的字段需要有函数加持,比如平均、最大、最小,在这里也就是time的字段,station字段是分组的字段,那level字段是干什么用的呢? 所以这里即使展示出来了level,也不是你想要的结果,这里一定要注意。