CDA117556

2022-01-23   阅读量: 371

Mysql

高德 题目 老师的or表连接 我的 union

扫码加入数据分析学习群

高德题目:乘客司机同属用户,信息在一张用户表内,有的用户因故被禁止;订单表乘客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;


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
33.6822 6 0 关注作者 收藏

评论(0)


暂无数据

推荐课程