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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥不能再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语句执行到where语句时,此时还没有结果集产生,sql只是在执行筛选,筛选后才会生成组或结果集。
当where后直接跟聚合函数时,这时聚合函数找不到要执行的数据集合,导致聚合查询失败。但是我们可以把select.....where.....当做一个结果集,然后再用聚合就可以了。
另外聚合函数可以用在group by...having后,因为group by分组后是一个结果集,另外having后也可以跟条件。
参考技术A count()是一个聚集函数(也称为聚合函数)是为了选定行的数目,可以包含空值。group by 是分组, 可以按照一个多多个字段分组。 使用时应注意:select 后显示的信息:要么包含在聚集函数中,要么包含在group by 子句中。where :是一个条件语句,在where后面跟的是条件! 参考技术B

规定的,用多了就会啦

以上是关于为啥不能再where语句中直接使用聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

为啥sql查询语句中的count(*)等聚合函数可以放在having后面,而不能放在where后面?

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

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

SQL中的WHERE子句中为啥不允许应用聚集函数呢?请通俗的解释一下或者谈谈自己的见解!

where中不能使用聚合函数

group by 列 聚合函数 where having