为什么mysql having的条件表达式可以直接使用select后的别名?

SQL语句的语法顺序:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY

因此一般不能在having condition中使用select list中的alias。

但是mysql对此作了扩展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默认不开启。在5.7.5或之后的版本默认开启。

如果ONLY_FULL_GROUP_BY sql mode不开启,那么mysql对标准SQL的扩展可以生效:

  1. 允许在select list、having condition和order by list中使用没有出现在group by list中的字段。此时mysql会随机选择没有出现在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
  2. 允许在having condition中使用select list中的alias
原文地址:https://www.cnblogs.com/leisurelylicht/p/wei-shen-memysql-having-de-tiao-jian-biao-da-shi-k.html