题解 | #每个城市中评分最高的司机信息#

每个城市中评分最高的司机信息

http://www.nowcoder.com/practice/dcc4adafd0fe41b5b2fc03ad6a4ac686

1.先计算所有司机的平均评分,平均订单数,平均里程

select city, driver_id,avg(grade) avg_grade,
count(order_id)/count(distinct date(order_time)) avg_order_num,
sum(mileage)/count(distinct date(order_time)) avg_mileage
from tb_get_car_order
join 
tb_get_car_record
using(order_id)
group by city,driver_id

得到下表

alt

2.用rank() over() 窗口函数得到排名(按城市分区按平均分数降序)

select *, rank() over(partition by city order by avg_grade desc) rk from (
select city, driver_id,avg(grade) avg_grade,
count(order_id)/count(distinct date(order_time)) avg_order_num,
sum(mileage)/count(distinct date(order_time)) avg_mileage
from tb_get_car_order
join 
tb_get_car_record
using(order_id)
group by city,driver_id) t1;

得到下表

alt

3.最后,取整,并筛选排名为1的数据,结果按照avg_order_num升序,最终的sql为

select city,driver_id,round(avg_grade,1) avg_grade ,round(avg_order_num,1) avg_order_num,
round(avg_mileage,3) avg_mileage
from
(select *, rank() over(partition by city order by avg_grade desc) rk from 
(select city, driver_id,avg(grade) avg_grade,
count(order_id)/count(distinct date(order_time)) avg_order_num,
sum(mileage)/count(distinct date(order_time)) avg_mileage
from tb_get_car_order
join 
tb_get_car_record
using(order_id)
group by city,driver_id) t1) t2
where rk =1
order by avg_order_num

得到正确结果

全部评论
大哥,你哪来的数据集?
点赞 回复 分享
发布于 2023-08-09 17:58 北京
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-27 12:14

相关推荐

不愿透露姓名的神秘牛友
07-16 12:23
点赞 评论 收藏
分享
07-07 12:47
门头沟学院 Java
码农索隆:竟然还真有卡体检报告的
点赞 评论 收藏
分享
评论
17
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务