2017-06-12 81 views
1

有關我的問題的簡單示例,爲什麼我不能這樣做?爲什麼我們不能在分組聲明中使用Where子句?

select id_number, sum(revenue) 
from table A 
where sum(revenue)>1000 
group by id_number 

(在這種情況下,任何引起混亂,爲什麼我不能只返回有超過1000的結果收入?)

聲明,我有點新的SQL,但找不到任何關於這個的文件。

謝謝,

+0

當條件屬於聚合數據時,您需要使用'having'而不是'where'(在group by之後)。 – trincot

+0

您可以使用'where revenue> 1000'來過濾聚合之前的單個行。 –

+0

這是不行的,因爲他想要所有他的產品的總和。因此,如果他有五種產品,每種價值999美元,那麼他的總價格就會變成0美元,因爲它們都沒有超過1000美元。 – SandPiper

回答

1

這是設計的SQL。通過使用WHERE您篩選源表。聲明片段的順序如同書面。這意味着你想過濾在過濾表上應用的SUM。這意味着您必須使用HAVING子句對已分組結果使用過濾器。使用

select id_number, sum(revenue) 
from table A  
group by id_number 
having sum(revenue) > 1000 
0

簡單的答案是因爲WHERE子句在聚合子句之前被評估。因此,您正嘗試基於尚不存在的內容進行過濾。但是,您可以先解決這個問題。寫一個子查詢,然後從中選擇:

WITH RevenueTotals AS (SELECT id_number, sum(revenue) AS Rev_Total 
         FROM table A 
         GROUP BY id_number) 
SELECT id_number, Rev_Total 
FROM RevenueTotals 
WHERE Rev_Total > 1000 
相關問題