题解 | #每个城市中评分最高的司机信息#
每个城市中评分最高的司机信息
http://www.nowcoder.com/practice/dcc4adafd0fe41b5b2fc03ad6a4ac686
通过代码
with t as (select
driver_id ,
city,
count(distinct date(order_time)) days,
count(*) orders,
sum(mileage) ways,
sum(grade) / count(grade) avgs
FROM
tb_get_car_order
JOIN
tb_get_car_record
ON
tb_get_car_order.order_id = tb_get_car_record.order_id
GROUP BY
driver_id,city)
SELECT
t.city,
driver_id,
round(avgs,1) avg_grade,
round(orders / days ,1) avg_order_num,
round(ways / days ,3) avg_mileage
from
t
join(
select
city,
max(avgs) maxs
from
t
group by
city) t2
on
t.city = t2.city
WHERE
t.avgs = t2.maxs
ORDER BY
avg_order_num
思路
请统计每个城市中评分最高的司机平均评分、日均接单量和日均行驶里程数。
注:有多个司机评分并列最高时,都输出。
平均评分和日均接单量保留1位小数,
日均行驶里程数保留3位小数,按日均接单数升序排序。
平均评分 avg(grade)
兼职天数 count(distinct date(order_time)) days,
总接单量 count(driver_id) orders(这里*也可以但是格式问题就id)
总行驶里程数 sum(mileage) ways,
然后就好说了两表连接查出以上数据再分别计算
with t as (select
driver_id ,
city,
count(distinct date(order_time)) days,
count(*) orders,
sum(mileage) ways,
sum(grade) / count(grade) avgs
FROM
tb_get_car_order
JOIN
tb_get_car_record
ON
tb_get_car_order.order_id = tb_get_car_record.order_id
GROUP BY
driver_id,city)
有多个司机评分并列最高时,都输出
这个怎么办呢? 我选择对计算结果出来的表进行外连接max
也就是先查出来每个城市最大平均数
select
city,
max(avgs) maxs
from
t
group by
city
然后跟计算结果
SELECT
t.city,
driver_id,
round(avgs,1) avg_grade,
round(orders / days ,1) avg_order_num,
round(ways / days ,3) avg_mileage
from
t
连接,where查出来等于最大值的人 最后order by一下
上表
join(上上表) t2
on
t.city = t2.city
WHERE
t.avgs = t2.maxs
ORDER BY
avg_order_num
一天一个Mysql 文章被收录于专栏
学习,一天一个mysql