2017-10-15 64 views
0

有朋友問與下面的查詢服務(見其他說明圖像):SQL解析函數:排名在多個分區

「我們需要生成一個基於銷售項目的數量銷售排名,按產品計算,換句話說,對於給定的產品,銷售數量最多的一年將排在第1位,下一個銷售數量的年份將排在第2位,依此類推「

我給他發了下面的SQL,不過他說所有排都回來了,排名爲1

Select product, year, num_of_items_sold 
RANK() OVER (PARTITION BY product, year ORDER BY num_of_items_sold) as sales_rank 
from prod_sales 

我錯過了什麼嗎?謝謝。

sales-rank

+0

使用'PARTITION BY product ORDER BY num_of_items_sold desc' –

+0

您使用的數據庫是?甲骨文? – SandPiper

+0

postgres。謝謝 – JohnGagliano

回答

2

考慮的問題,它可能看起來奇怪,year不需要在窗口的功能。所有它關心的是product和物品的銷售數量:

select product, year, num_of_items_sold 
     rank() over (partition by product 
        order by num_of_items_sold desc 
        ) as sales_rank 

還要注意爲order by的降序排序。

+0

戈登,你是對的。鑑於問題的語言,我設法混淆了自己。如果您知道某個源提供了由多個分區(多於一個字段)分割的rank函數的簡潔示例,請您直接向我介紹。非常感激。 – JohnGagliano

+0

@JohnGagliano。 。 。我認爲你只需要練習。窗口函數影響*整個*行,'year'只是行中的另一列。 –