SELECT
student_id
,COUNT(group_id) num
FROM StudentTable
WHERE num >= 2
GROUP BY student_id
ORDER BY num
desc
;
我一直收到错误:“num”无效的标识符。我不明白为什么where子句不适用于我给它的别名。我已经通过使用“having”子句找出了解决方案。我只是好奇为什么where子句不起作用,因为在我看来,为什么它不起作用是没有意义的。
答案 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 2
或ORDER BY COUNT(group_id)
。
查询不是"意识到" order by子句中的列别名。 select是查询引擎最后要运行的东西。
同样适用于WHERE
子句。
如果您希望过滤聚合函数,则使用HAVING
子句是最佳选择。即使这样,你也要说COUNT(group_id)