为什么我不能在 HAVING 子句中使用聚合别名?
考虑以下 SQL 语句:
select col1,count(col2) as col7 from --some join operation group by col1 having col7 >= 3 -- replace col7 by count(col2) to make the code work
此代码生成一个错误,指示“col7”是无效的列名称。为什么会这样?
原因在于SQL语句的执行顺序。 HAVING 子句在 SELECT 子句之前计算。这意味着当计算 HAVING 子句时,聚合函数 count(col2) 的别名“col7”尚未定义。
SQL 按以下顺序执行查询:
因此,在给定的代码中,HAVING子句尝试在 SELECT 子句中定义别名“col7”之前使用它。要解决此问题,您可以将“col7”替换为聚合函数本身:
select col1,count(col2) from --some join operation group by col1 having count(col2) >= 3
这允许 HAVING 子句正确计算 col2 的聚合计数。
以上是为什么不能在 SQL HAVING 子句中使用聚合别名?的详细内容。更多信息请关注PHP中文网其他相关文章!