Oracle SQL获取分支的最大销售额的商店分支和产品类别[重复]

问题描述 投票:2回答:1

我有一个具有多个分支的商店的架构。我正在努力获得一个分支机构列表及其最畅销的产品类别。

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

谢谢!

sql oracle greatest-n-per-group
1个回答
2
投票

为此,您可以使用oracle中的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)
© www.soinside.com 2019 - 2024. All rights reserved.