高德題目:乘客司機(jī)同屬用戶,信息在一張用戶表內(nèi),有的用戶因故被禁止;訂單表乘客id和司機(jī)id在兩列,其中訂單有完成、被司機(jī)取消、被客戶取消,
同一訂單時(shí)間用戶司機(jī)共享;
我的代碼:
select client_id, sum(status_type='completed') 完成行程數(shù), avg(status_type='cancelled_by_driver') 被司機(jī)取消率
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') 完成行程數(shù), avg(status_type='cancelled_by_driver') 被司機(jī)取消率
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;
注意: 連續(xù)連一張表 要分別列表別名,以確定表中字段的坐標(biāo);
乘客和司機(jī)同在用戶列,需分別取出;連接后先取條件下乘客再union 條件下司機(jī);
表結(jié)構(gòu)跟老師的不一樣;
老師代碼:
select
user_id,
sum(status_type='completed') as 完成行程數(shù),
avg(status_type='cancelled_by_driver') as 被司機(jī)取消率
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;
(老師做法是)
連接點(diǎn)有兩個(gè),故可以連接兩次,后邊group by 可以用連接過來的user_id 字段(該字段值不重復(fù))。
其他跟自己做的一樣,只是表結(jié)構(gòu)不一樣,主要是體現(xiàn)在表連接上,表連接可以用or;








暫無數(shù)據(jù)