2016-11-11 41 views
1

enter image description here準備月度銷售報告誰擁有最大的銷售客戶,爲下表

準備誰擁有最大的銷售客戶的月度銷售報告,爲下表

+0

可能有用的:http://stackoverflow.com/questions/9220944/oracle-getting-maximum-value-of-a-group –

+0

請定義「月度銷售報告」 - 這不是一個標準的術語,所以你必須解釋一下。除此之外,發佈你的作業並尋求幫助是可以的 - 但你必須展示你的工作:你嘗試過什麼,什麼不起作用,輸出與預期的不同,等等。這不是「做我的家庭作業「網站(儘管有時感覺就像是這樣)。 – mathguy

+0

我投票結束這個問題作爲題外話,因爲 - 根據網站規則,當你要求志願者幫助你完成作業時,你必須展示你的工作。 – mathguy

回答

0

這是如何你可以在「一」查詢檢索一個例子:

  • 誰擁有最大的銷售客戶的ID
  • 該客戶的銷售彙總

首先帶來的CUSTOMER_ID和銷售的相應的總結查詢是這樣的:

select customer_id, sum(sales) as sumsales from mytable group by customer_id; 

這個疑問,等級已被添加到銷售摘要的降序排列。這將允許稍後根據其等級選擇單個記錄。因此,一個包裝是必要的:

select customer_id, sumsales, rank() over (order by sumsales desc) as rnk from 
    (select customer_id, sum(sales) as sumsales from mytable group by customer_id); 

現在的排名條目是可用的,排名第一的記錄,必須選擇:

select customer_id, sumsales from 
    (select customer_id, sumsales, rank() over (order by sumsales desc) as rnk from 
     (select customer_id, sum(sales) as sumsales from mytable group by customer_id) 
    ) 
where rnk=1; 

然而,這未必是實現最有效的方法這個。

編輯:

爲了避免一個包裹層,只是添加的等級,有可能秩foeld添加到第一內部查詢:

select customer_id, sum(sales) as sumsales, rank() over (order by sum(sales) desc) as rnk 
from mytable group by customer_id; 

然後,單個需要包裝的查詢,選擇排名第一的記錄爲:

select customer_id, sumsales from (
    select customer_id, sum(sales) as sumsales, rank() over (order by sum(sales) desc) as rnk 
    from mytable group by customer_id 
) 
where rnk=1; 

參考其他類似的相關答案here