众所周知,sql语句特别是DQL语句是有规定的执行顺序的
(7)select
(8)distinct 字段名1,字段名2...
(5)[fun 字段名]
(1)from 表名
(2)inner|left|right|full|cross join on 连接条件
(3)where 筛选条件
(4)group by 分组条件
(6)having 分组后的筛选条件
(9)order by 排序条件
(10)limit <起始偏移量,条目数>
这个顺序是毋庸置疑的。
按照这个执行顺序,在分组后的过滤having不能够直接使用在select中起的别名。
但是我在写sql时发现居然可以在having中直接使用select语句中起的别名!
那是因为
在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。
如果ONLY_FULL_GROUP_BY sql mode不开启,那么mysql对标准SQL的扩展可以生效。
这样一来,我们在牛客上做sql题,或者您的MYSQL版本在5.7.5以上的同学们,可以放心直接使用这一语法了。
参考:博客园大佬