我正在使用 Microsoft SQL Server 2014。
以下是我的询问
SELECT type, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING total_calories > 150;
我得到了错误
消息 207,第 16 级,状态 1,第 2 行 列名称“total_calories”无效。
有人可以指出我做错了什么吗?谢谢。
Aggregation
是必需的,因为您无权访问别名 total_calories
SELECT type,SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING SUM(calories) > 150;
您还可以将
GROUP BY
查询包装在派生表中:
select type, total_calories
FROM (
SELECT type, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
) AS dt
WHERE total_calories > 150
HAVING子句允许您根据聚合函数的结果进行过滤,例如SUM、MIN和MAX。您必须直接使用这些函数,遗憾的是 SELECT 子句中的列别名不能在此处重用。这是“逻辑处理顺序”的结果。摘自MSDN:
以下步骤显示逻辑处理顺序,或绑定 order,用于 SELECT 语句。这个顺序决定了对象何时 在一个步骤中定义的内容可用于后续的子句 脚步。例如,如果查询处理器可以绑定(访问) FROM 子句中定义的表或视图、这些对象及其 列可供所有后续步骤使用。反过来, 因为 SELECT 子句是第 8 步,所以任何列别名或派生 该子句中定义的列不能被前面的引用 条款。但是,它们可以被后续子句引用,例如 ORDER BY 子句。请注意,实际的物理执行 语句由查询处理器确定,顺序可能会有所不同 从这个列表中。1.来自
2.开
3.加入
4.哪里
5.分组依据
6.使用 Cube 或 ROLLUP
7.拥有
8.选择
9.独特
10.订购方式
11.顶部
HAVING
中的聚合函数:
SELECT type
, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING SUM(calories) > 150;