这个问题在这里已有答案:
我有一个具有多个分支的商店的架构。我正在努力获得一个分支机构列表及其最畅销的产品类别。
这是我对查询的看法:
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
谢谢!
为此,您可以使用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)