2017-12-27 969 views
1

我想要計算具有特定SKU的商店(商店1-10)的不同數量。這裏是我的代碼:在SQL中嵌套計數

SELECT distinct COUNT(*) as total_store 
FROM(

    select distinct st.* 
    from (select st.* 
     from store_table st 
)st 

WHERE st.store between 1 and 10 
AND st.sku = 10101 
GROUP BY st.store 
HAVING COUNT(*) >= 1 
)a; 

我不斷收到一個錯誤:

ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression"

,我不知道爲什麼它是說?

回答

3

你的錯誤是由你分組st.store而沒有選擇數據。您在SELECT或GROUP BY子句中所需的所有非聚合必須同時出現在兩者中。

話雖如此,你讓這太複雜了。如果我們從頭開始,你想從商店的東西:具有一定的SKU

select * from stores where store between 1 and 10 and sku = 10101 

select * from stores 

只有某些商店

select * from stores where store between 1 and 10 

現在需要的獨特的商店

select distinct store from stores where store between 1 and 10 and sku = 10101 

finally y OU希望獨特的商店

select count(distinct store) 
    from stores 
where store between 1 and 10 
    and sku = 10101 

它看起來像你從集,而不是邏輯層層建立查詢起來的計數。查詢是一組條件,只需要創建集合(內聯視圖等),如果您需要添加依賴於構造表達式的操作。構建查詢時,重點關注分層附加邏輯。如果由此產生的查詢看起來太複雜了,那麼你就可能會這麼說。


根據上表店名店其實我認爲這是對存儲唯一的(而且這是主鍵,因此非空),所以你不需要進行額外的排序使其具有唯一性

select count(*) 
    from stores 
where store between 1 and 10 
    and sku = 10101 
0

在SQL當你使用GROUP BY,那麼你必須要確定你不能使用*,僅一個字段與組的選擇字段。 是的,你可以使用*,那麼你必須聲明組中的所有字段。 此外,您還需要將所有具有聚合功能的字段,但無論哪個字段與分組依據都不允許使用聚合。