2017-07-18 42 views
1

所以我有了喜歡的一組信息表這個SQL查詢的另一列,讓每列分組最低的3個值

name  Type PRICE 
11111 XX  0.001 
22222 YY  0.002 
33333 ZZ  0.0001 
11111 YY  0.021 
11111 ZZ  0.0111 
77777 YY  0.1 
77777 ZZ  1.2 

現在,這些數字會持續大約一百萬行,有可能是將20個相同的'名稱'映射到20個不同的類型。但每個名稱只有一個唯一類型。我的意思是11111可以有XX,YY,ZZ,但它不能有YY,ZZ,YY。

我需要的是獲得最低3價格和他們是什麼類型的名稱。眼下

我可以做得到每名最低價格:

select name, type, min(price) from table group by name; 

然而這僅僅是最低價格,但我需要最低3倍的價格。我已經嘗試了幾天,我似乎無法得到它。所有的幫助表示讚賞。

另外,請讓我知道如果我忘了任何信息,我仍然試圖找出堆棧溢出:P

哦,並且數據庫是使用SQL語法NOSQL。

編輯:我似乎無法從我的表中獲取的格式下來我的例子中的數據正確顯示

+0

將'type'添加到'Group By',看它是否改變結果。 –

+0

@WEI_DBA由於(name,type)被定義爲唯一對,因此按(name,type)分組將不會導致發生分組。 – yanman1234

+0

啊對了。謝謝。 –

回答

0

如果你的數據庫支持窗口功能,並允許的可能性,有可能會超過三行在你的數據與三個最低價格中的任何一個,這應該這樣做:

select the_table.* 
from 
    the_table 
    inner join (
     select name, price 
     from (
      select name, price, row_number() over(partition by name order by price) as rn 
      from the_table) as x 
     where rn < 4 
     ) as y on y.name=the_table.name and y.price=the_table.price; 
+0

可悲的是,當我嘗試這個它說我不能做ROW_NUMBER – MichaelJC

相關問題