2011-09-25 56 views
0

問題: 我需要找到供應商的頂級客戶端。 頂級客戶擁有所有訂單上的最大項目總和。 如果供應商有2個頂級客戶,那麼頂級客戶將使用最小訂單ID,這意味着 - 誰先創建訂單並獲得最大物品 - 將成爲頂級客戶。 我在寫這個SQL代碼:如何在Oracle中的一列中選擇多個列沒有重複項

select s.s_id, c.c_id, min(o.o_id), count(*) 
from suppliers s, clients c, orders o, items i 
where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o 
group by s.s_id, c.c_id 
order by 4 desc, 3 

,並得到這樣的結果:http://imageshack.us/photo/my-images/148/32969388.jpg/

,但我需要得到:http://imageshack.us/photo/my-images/842/51815927.jpg/

回答

1

您需要排名順序計數和ID。所以你應該使用分析和內聯視圖。例如:

select s_id 
     , c_id 
     , min_order_id 
     , no_of_orders 
from (
    select s_id 
      , c_id 
      , min_order_id 
      , no_of_orders 
      , rank() over (partition by s_id 
          order by no_of_orders DESC, min_order_id ASC) rnk 
    from (
     select s.s_id 
       , c.c_id 
       , min(o.o_id) as min_order_id 
       , count(*) as no_of_orders 
     from suppliers s, clients c, orders o, items i 
     where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o 
     group by s.s_id, c.c_id 
     ) 
    )  
where rnk=1 
/
+0

對不起,你的SQL代碼得到這個:http://imageshack.us/photo/my-images/98/23702547.jpg/謝謝你的幫助。 – user963601

+0

所有行的排名均爲1 – user963601

+0

排名僅適用於每個供應商分區(而不是供應商,客戶端分區)。我已經編輯了APC的查詢。 –

相關問題