有關我的問題的簡單示例,爲什麼我不能這樣做?爲什麼我們不能在分組聲明中使用Where子句?
select id_number, sum(revenue)
from table A
where sum(revenue)>1000
group by id_number
(在這種情況下,任何引起混亂,爲什麼我不能只返回有超過1000的結果收入?)
聲明,我有點新的SQL,但找不到任何關於這個的文件。
謝謝,
有關我的問題的簡單示例,爲什麼我不能這樣做?爲什麼我們不能在分組聲明中使用Where子句?
select id_number, sum(revenue)
from table A
where sum(revenue)>1000
group by id_number
(在這種情況下,任何引起混亂,爲什麼我不能只返回有超過1000的結果收入?)
聲明,我有點新的SQL,但找不到任何關於這個的文件。
謝謝,
這是設計的SQL。通過使用WHERE您篩選源表。聲明片段的順序如同書面。這意味着你想過濾在過濾表上應用的SUM。這意味着您必須使用HAVING子句對已分組結果使用過濾器。使用
select id_number, sum(revenue)
from table A
group by id_number
having sum(revenue) > 1000
簡單的答案是因爲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
當條件屬於聚合數據時,您需要使用'having'而不是'where'(在group by之後)。 – trincot
您可以使用'where revenue> 1000'來過濾聚合之前的單個行。 –
這是不行的,因爲他想要所有他的產品的總和。因此,如果他有五種產品,每種價值999美元,那麼他的總價格就會變成0美元,因爲它們都沒有超過1000美元。 – SandPiper