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的擴展可以生效:
- 允許在select list、having condition和order by list中使用沒有出現在group by list中的字段。此時mysql會隨機選擇沒有出現在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
- 允許在having condition中使用select list中的alias