262. 行程和用户

文章访问量:

IF(a||b,1,NULL)

https://leetcode.cn/problems/trips-and-users/description/

虽然说是困难题,但实际上只是写起来很长很麻烦而已。

黑名单的客户和司机都需要被排除出结果集,麻烦的是黑名单只给了个users_id,而这个users_id包含了客户和司机的id。所以我想的是直接两次left join完事,省事。

然后就是IF的用法,不知道能用“或”符号的话写起来还是挺麻烦的。

SQL
# Write your MySQL query statement below
SELECT A.request_at AS 'Day',
ROUND(
    COUNT(IF(status='cancelled_by_driver'||status='cancelled_by_client',1,NULL))
    /
    COUNT(A.status),2
) AS 'Cancellation Rate'
FROM Trips AS A 
LEFT JOIN Users AS B 
ON A.client_id = B.users_id
LEFT JOIN Users AS C 
ON A.driver_id = C.users_id 
WHERE B.banned!='Yes' AND C.banned!='Yes' 
AND A.request_at <='2013-10-03' AND A.request_at >='2013-10-01'
GROUP BY A.request_at

题外话,我又和我一年前提交的代码对比了一下,发现自己以前写的是什么🐕💩

SQL
# Write your MySQL query statement below
SELECT A.request_at AS Day
,ROUND((COUNT(IF(A.status='cancelled_by_client',1,NULL))
+COUNT(IF(B.status='cancelled_by_driver',1,NULL)) 
)/COUNT(A.id),2)AS 'Cancellation Rate'
FROM(
  SELECT id,request_at,client_id,banned,status
  FROM Trips
  LEFT JOIN Users
  ON client_id=users_id
  WHERE banned='NO'
)A
JOIN(
  SELECT id,request_at,driver_id,banned,status
  FROM Trips AS B
  LEFT JOIN Users AS C
  ON driver_id=users_id
  WHERE banned='NO'
)B
ON A.id=B.id
WHERE A.request_at<='2013-10-03'
AND A.request_at>='2013-10-01'
GROUP BY A.request_at
Subscribe
提醒
0 评论
Inline Feedbacks
View all comments
0
在此留下你的评论x