不能将where子句与别名count函数名一起使用

时间:2014-07-31 18:37:28

标签: sql

SELECT
   student_id
   ,COUNT(group_id) num
FROM StudentTable
WHERE num >= 2 
GROUP BY student_id 
ORDER BY num
desc
;

我一直收到错误:“num”无效的标识符。我不明白为什么where子句不适用于我给它的别名。我已经通过使用“having”子句找出了解决方案。我只是好奇为什么where子句不起作用,因为在我看来,为什么它不起作用是没有意义的。

2 个答案:

答案 0 :(得分:3)

您不需要where条款。你想要一个having子句:

SELECT student_id, COUNT(group_id) num
FROM StudentTable
GROUP BY student_id 
HAVING num >= 2
ORDER BY num desc;

某些数据库可能不接受having子句中的别名。在这种情况下,您需要使用子查询或重复定义:

SELECT student_id, COUNT(group_id) num
FROM StudentTable
GROUP BY student_id 
HAVING COUNT(group_id) >= 2
ORDER BY COUNT(group_id) desc;

答案 1 :(得分:1)

您必须说ORDER BY 2ORDER BY COUNT(group_id)

查询不是"意识到" order by子句中的列别名。 select是查询引擎最后要运行的东西。

同样适用于WHERE子句。

如果您希望过滤聚合函数,则使用HAVING子句是最佳选择。即使这样,你也要说COUNT(group_id)