首页 > 数据库 > mysql教程 > 为什么不能在 SQL HAVING 子句中使用聚合别名?

为什么不能在 SQL HAVING 子句中使用聚合别名?

Susan Sarandon
发布: 2024-12-21 00:32:16
原创
634 人浏览过

Why Can't I Use an Aggregate Alias in a SQL HAVING Clause?

为什么我不能在 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 按以下顺序执行查询:

  1. 计算FROM子句中指定的所有表的笛卡尔积。
  2. 根据WHERE过滤行子句。
  3. 根据 GROUP BY 子句对行进行分组。
  4. 根据 HAVING 子句过滤组。
  5. 计算 SELECT 子句目标列表中的表达式。
  6. 如果指定了 DISTINCT,则删除重复行。
  7. 如果有任何子选择,则执行并集
  8. 根据 ORDER BY 子句对行进行排序。
  9. 应用 TOP 子句(如果存在)。

因此,在给定的代码中,HAVING子句尝试在 SELECT 子句中定义别​​名“col7”之前使用它。要解决此问题,您可以将“col7”替换为聚合函数本身:

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3
登录后复制

这允许 HAVING 子句正确计算 col2 的聚合计数。

以上是为什么不能在 SQL HAVING 子句中使用聚合别名?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板