高德题目:乘客司机同属用户,信息在一张用户表内,有的用户因故被禁止;订单表乘客id和司机id在两列,其中订单有完成、被司机取消、被客户取消,
同一订单时间用户司机共享;
我的代码:
select client_id, sum(status_type='completed') 完成行程数, avg(status_type='cancelled_by_driver') 被司机取消率
from trips
left join users u
on trips.client_id=u.user_id
left join users d
on trips.driver_id=d.user_id
where year(request_at)=2013 and month(request_at)=10 and date_format(request_at,'%w') in (0,6) and u.banned='no'
group by client_id
union
select driver_id, sum(status_type='completed') 完成行程数, avg(status_type='cancelled_by_driver') 被司机取消率
from trips
left join users u
on trips.client_id=u.user_id
left join users d
on trips.driver_id=d.user_id
where year(request_at)=2013 and month(request_at)=10 and date_format(request_at,'%w') in (0,6) and d.banned='no'
group by driver_id;
注意: 连续连一张表 要分别列表别名,以确定表中字段的坐标;
乘客和司机同在用户列,需分别取出;连接后先取条件下乘客再union 条件下司机;
表结构跟老师的不一样;
老师代码:
select
user_id,
sum(status_type='completed') as 完成行程数,
avg(status_type='cancelled_by_driver') as 被司机取消率
from trips
left join users
on user_id=client_id or user_id= driver_id
where year(request_at)=2013 and month(request_at)=10 and date_format(request_at,'%w') in (0,6) and banned='no'
group by user_id;
(老师做法是)
连接点有两个,故可以连接两次,后边group by 可以用连接过来的user_id 字段(该字段值不重复)。
其他跟自己做的一样,只是表结构不一样,主要是体现在表连接上,表连接可以用or;








暂无数据