2017-12-19 8 views
1

複数のブランチを持つストアのスキーマがあります。私は枝のリストとそれらの1つの最も売れている製品カテゴリを取得しようとしています。ブランチの最大売上を持つストア・ブランチおよび製品カテゴリを取得するためのOracle SQL

ERD design for the tables

これは私の知る限り、クエリで得ているようです:

枝があり、各製品カテゴリと総売上のために、支店名のリストを返します
select branch_name,prod_category,sum(p.prod_price*il.inv_line_qty) as 
Category_Value 
from w_branches b 
inner join w_products p on p.branch_id= b.branch_id 
inner join w_inv_line il on il.prod_id= p.prod_id 
inner join w_invoices i on i.inv_id=il.inv_id 
group by p.branch_id, b.branch_name,p.prod_category; 

カテゴリ。

BRANCH_NAME  PRODUCT CATEGORY  TOTAL SALES 
---------------- ------------------------------------ 
BRANCHMALL  CPU      41808 
BRANCH_POS  Desktop     62282 
BRANCH_EAST  CPU      51510 
BRANCH_EAST  Networking    81600 
BRANCH_POS  CPU      22477 
BRANCH_CENTRAL Desktop     126066 
BRANCHMALL  SSD      93154 
BRANCH_NORTH  CPU      217685 

ご覧のとおり、ブランチが繰り返されています。私は以下のように、支店の最大売上高を持つカテゴリを取得したいと考えています。

BRANCH_NAME  PRODUCT CATEGORY  TOTAL SALES 
---------------- ------------------------------------ 
BRANCH_POS  Desktop     62282 
BRANCH_EAST  Networking    81600 
BRANCH_CENTRAL Desktop     126066 
BRANCHMALL  SSD      93154 
BRANCH_NORTH  CPU      217685 

ありがとうございます!

+0

解決策を質問に追加しないでください。解決策は答えになります。あなたの質問は重複しているので、あなたはそれに答えることができないので、重複して答えることができます。 –

+0

ありがとう、ありがとう。 –

答えて

2

の場合、oracleでrank()を使用してランクを識別し、すべての値を1つのランクで選択できます。

select * from (
select branch_name, prod_category,category_value, rank() over (partition by branch_name order by category_value desc) as rank from 
(select branch_name,prod_category,sum(p.prod_price*il.inv_line_qty) as 
Category_Value 
from w_branches b 
inner join w_products p on p.branch_id= b.branch_id 
inner join w_inv_line il on il.prod_id= p.prod_id 
inner join w_invoices i on i.inv_id=il.inv_id 
group by p.branch_id, b.branch_name,p.prod_category)) 
where rank = 1) 
+0

お返事ありがとうございました!残念ながら私は最後の行「どこにランク= 1」でわかりませんがエラーになります。エラー:ORA-00904: "RANK":無効な識別子 00904 00000 - "%s:無効な識別子" " –

+0

最後に書き直す必要があるようです。 2行。 "p.prod_category)の代わりに" p.prod_category))rank = 1 "(すなわち、ブラケットは別の場所で閉じなければならない)。 – Littlefoot

+0

それが解決しました。本当にありがとうございます海賊とリトルフット(あなたのように聞こえる2つのcrewmatesことができる)! –

関連する問題