为啥聚集函数不能出现在where子句中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥聚集函数不能出现在where子句中相关的知识,希望对你有一定的参考价值。

前提:聚合函数使用必须要有一个结果集。
当sql语句执行到where语句时,此时还没有结果集产生,sql只是在执行筛选,筛选后才会生成组或结果集。
当where后直接跟聚合函数时,这时聚合函数找不到要执行的数据集合,导致聚合查询失败。但是我们可以把select.....where.....当做一个结果集,然后再用聚合就可以了。
另外聚合函数可以用在group by...having后,因为group by分组后是一个结果集,另外having后也可以跟条件。
参考技术A count()是一个聚集函数(也称为聚合函数)是为了选定行的数目,可以包含空值。group by 是分组, 可以按照一个多多个字段分组。 使用时应注意:select 后显示的信息:要么包含在聚集函数中,要么包含在group by 子句中。where :是一个条件语句,在where后面跟的是条件! 参考技术B

规定的,用多了就会啦

为啥不能再where语句中直接使用聚合函数

参考技术A 因为Where语句是在Group By之前执行的,都还没有Group By当然就不能使用聚合函数了。
以下是SQL语句的执行顺序:
FROM
ON
OUTER(JOIN)
WHERE
GROUP BY
CUBE|ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP

以上是关于为啥聚集函数不能出现在where子句中的主要内容,如果未能解决你的问题,请参考以下文章

SQL——聚集函数

SQL中WHERE 和HAVING的区别

在SQL语句中同时包含where子句,groupby子句,having子句及聚集函数,将按照怎么样的顺序执行?

为啥聚合函数不能放在where后面?

为啥不能再where语句中直接使用聚合函数

where 后面可以接聚合函数吗