查找每个城市商品利润前三的商品及其信息!
题目信息如下:
table_name:t_order
columns:
city_name–城市名称
order_id–订单号
goods_code–商品编码
goods_name–商品名称
order_status–订单状态:0–未完成,1–已完成
product_price–商品金额
product_pay_price–实收金额
cost_price–商品成本
输出信息如下:
输出各城市利润额排名前三的商品,并输出对应的订单数与利润率
利润率=成本/实收(题目里是这么给的,但我算的是利润/成本)
输出city_name,goods_name,rn,order_num,profit,profit_rate
# step3
select * from (
# step2
select
city_name
,goods_name
,row_number() over(partition by city_name order by profit desc) as rn # 按总利润计算商品利润额降序
,order_num
,profit
,profit/cost_price_sum as profit_rate # 利润率=总利润/总成本
from(
# step1
select
city_name
,goods_name
,count(*) as order_num # 计算成交单数
,sum(cost_price) as cost_price_sum # 计算总成本
,sum(product_pay_price-cost_price) as profit # 计算总利润
from t_order
where order_status=1 # 订单状态为1---已完成
group by city_name,goods_name # 这里使用group by可以确保每个商品仅保留一条信息
) a
) a
where rn in (1,2,3) # 查找排名前三的