1. 程式人生 > 實用技巧 >SQL中WHERE子句中為什麼不能使用聚合函式

SQL中WHERE子句中為什麼不能使用聚合函式

在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子句則是對資料行進行過濾的,在篩選過程中依賴“基於已經篩選完畢的資料得出的計算結果”是一種悖論,這是行不通的。更簡單地說,因為聚集函式要對全列資料時行計算,因而使用它的前提是:結果集已經確定!