2017-12-19 16 views
1

여러 지점이있는 상점에 대한 스키마가 있습니다. 나는 지점과 그들의 가장 많이 팔리는 제품 카테고리의 목록을 얻으려고 노력하고있다.오라클 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

오라클의 rank()를 사용하여 순위를 확인한 다음 하나의 순위로 모든 값을 선택할 수 있습니다.

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

답변에 대해 고마워요! 불행히도 나는 마지막 줄 "where rank = 1"에서 오류를 발견합니다. 알아낼 수 없습니다. 오류 : ORA-00904 : "RANK": 유효하지 않은 식별자 00904. 00000 - "% s : 유효하지 않은 식별자" " –

+0

마지막 줄을 다시 써야합니다. 두 줄. "p.prod_category"대신 "rank = 1") "rank = 1"인 곳에 (즉, 브래킷은 다른 장소에서 닫아야합니다.) – Littlefoot

+0

해결했습니다. 고마워 해적 & Littlefoot (당신처럼 두 소리가 crewmates 수)! –