[英]'invalid column name' while using the HAVING
我正在使用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'。
这是一个非常简单的表(我是sql和学习它的新手)。 谁能指出我做错了什么? 谢谢。
由于您无法访问别名total_calories
,因此需要进行Aggregation
SELECT type,SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING SUM(calories) > 150;
您还可以在派生表中包装GROUP BY
查询:
select type, total_calories
(
SELECT type, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
) dt
WHERE total_calories > 150
您需要在HAVING
使用聚合函数:
SELECT type
, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING SUM(calories) > 150;
HAVING子句允许您根据聚合函数的结果进行过滤,如SUM,MIN和MAX。 您必须直接使用这些函数,遗憾的是,SELECT子句中的列别名不能在此处重用。 这是逻辑处理顺序的结果 。 摘自MSDN :
以下步骤显示SELECT语句的逻辑处理顺序或绑定顺序。 此顺序确定在一个步骤中定义的对象何时可用于后续步骤中的子句。 例如,如果查询处理器可以绑定(访问)FROM子句中定义的表或视图,则这些对象及其列可供所有后续步骤使用。 相反,因为SELECT子句是步骤8,所以前面的子句不能引用该子句中定义的任何列别名或派生列。 但是,它们可以由后续子句引用,例如ORDER BY子句。 请注意,语句的实际物理执行由查询处理器确定,并且顺序可能与此列表不同。
1.从
2.1936
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE或WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.