深入理解group by 语句的执行顺序 from→where→group by→select(含聚合函数)

  由于之前没有对group by 语句的执行顺序(执行原理)做深入的了解,所以导致在实际应用过程中出现了一些问题。举个简单的粟子,比如一个表testA中的所有数据如下图:

  我现在想从testA中查询username字段,并只取前7位,取了前7位后,想让相同的数据就合并为一条,我就想当然地写了如下语句:“select substr(username,0,7) username from testA where 1=1 group by username;”心想万事大吉了,可执行之后的结果令我诧异了。上图:

为什么明明是一样的数据,group by 却没有生效呢?我是百思不得其姐啊!经过多次尝试,探索结果如下:如果将上述SQL语句修改成“select substr(username,0,7) t from testA where 1=1 group by t;”执行时就会报如下错误:

  后来在我看了group by语法我执行顺序后,我才明白,原来它是先执行group by,再执行substr()函数的,也就是说在上述粟子中,在执行group by时是将“Alberta”、“Alberta1”、“Alberta2”进行group by的,当然不会合并成一条了。也就是说在执行group by时是对表中原来的字段进行分组的,而不是处理之后的数据。

  今记录如此,忘引以为戒!

猜你喜欢

转载自www.cnblogs.com/jinjunweina/p/9705922.html