SQL中WHERE子句中为什么不能使用聚合函数?


我们先来看一下这个代码:

SELECT *
FROM product
WHERE SUM(slae_price) > 1000
GROUP BY product_type;

这样子会报错:

SELECT *
FROM product
WHERE SUM(slae_price) > 1000
GROUP BY product_type
> 1111 - Invalid use of group function
> 时间: 0.001s

为什么呢?

我们先来看一下这句查询中的执行顺序:FROM -> WHERE -> GROUP BY -> SELECT

首先我们知道像SUM()、AVG()、MAX()等等的聚合函数,是对结果进行筛选的,在FROM之后,我们只得到product这张表,如果对这张表进行聚合筛选后,那么接下来的GROUP BY该怎么办呢?GROUP BY是对表进行分组的,但是你都已经WHERE筛选完了,还怎么分组,所以矛盾,所以不能在WHERE中使用聚合函数!

聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行进行过滤的,在筛选过程中依赖“基于已经筛选完毕的数据得出的计算结果”是一种悖论,这是行不通的。更简单地说,因为聚集函数要对全列数据时行计算,因而使用它的前提是:结果集已经确定!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM