我正在使用Microsoft SQL SERVER 2014。
以下是我的查询
SELECT type, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING total_calories > 150;
我收到了错误
Msg 207,Level 16,State 1,Line 2 列名称无效' total_calories'。
这是一个非常简单的表(我是sql的新手并且正在学习它)。谁能指出我做错了什么?感谢。
答案 0 :(得分:5)
Aggregation
是必需的,因为您无法访问别名total_calories
SELECT type,SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING SUM(calories) > 150;
答案 1 :(得分:4)
您还可以将GROUP BY
查询包装在派生表中:
select type, total_calories
(
SELECT type, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
) dt
WHERE total_calories > 150
答案 2 :(得分:2)
您需要HAVING
中的聚合函数:
SELECT type
, SUM(calories) AS total_calories
FROM exercise_logs
GROUP BY type
HAVING SUM(calories) > 150;
答案 3 :(得分:0)
HAVING子句允许您根据aggregate function的结果进行过滤,例如SUM,MIN和MAX。您必须直接使用这些函数,遗憾的是,SELECT子句中的列别名不能在此处重用。这是Logical Processing Order的结果。取自MSDN:
以下步骤显示逻辑处理顺序或绑定 order,用于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