如果你需要更多关于如何处理这个数据分析师面试问题的说明,我和我的团队准备了一个演练视频,可能会有所帮助。
问题2:旅程和用户(MySQL)
“取消率的计算方法是将当天取消的(客户端或驱动程序)未禁用用户的请求数量除以当天未禁用用户的请求总数。
编写一个SQL查询,计算从“2013-10-01”到“2013-10-03”期间,每天未禁用用户(客户端和驱动程序都不能禁用)的请求取消率。四舍五入取消率到两位小数点。
以任意顺序返回结果表。
查询结果格式如下所示。
如果你想跟随我,这里是这个数据分析师面试问题的链接。
技术概念
要解决这个问题,您将需要前面使用的大部分概念。然而,也有一些额外的:
•cte
•四舍五入
•转换数据类型
解决方案与输出
解决方案是用MySQL编写的。
WITH stats AS
(SELECT request_at,
t.status <> 'completed' AS canceled
FROM trips t
JOIN users c ON (client_id = c.users_id
AND c.banned = 'no')
JOIN users d ON (driver_id = d.users_id
AND d.Banned = 'no')
WHERE request_at BETWEEN '2013-10-01' AND '2013-10-03' )
SELECT request_at AS Day,
ROUND(CAST(SUM(canceled) AS FLOAT)/CAST(COUNT(*) AS FLOAT), 2) AS 'Cancellation Rate'
FROM stats
GROUP BY Day
ORDER BY Day;
我们先来看CTE;这个叫stats。它是一个SELECT语句,返回请求的日期及其状态,其中状态不是“completed”。换句话说,请求被取消。
客户端或驱动程序都可以取消请求。因此这个查询需要JOIN两次。第一次,旅行与用户联合起来,让未被禁止的客户端取消请求。另一个JOIN使用相同的表来获取被驱动程序取消的请求。
这个数据分析师面试问题要求只包括特定的日期,这个标准在WHERE从句中说明了。
现在是另一个引用CTE的SELECT语句。它将取消的请求数除以请求总数。这是使用两个聚合函数完成的:SUM()和COUNT()。此外,比率必须更改为十进制数,并四舍五入到小数点后两位。
最后,输出按天分组并排序