确认率

🎯 问题描述(来源于LeetCode)

表: Signups
±---------------±---------+
| Column Name | Type |
±---------------±---------+
| user_id | int |
| time_stamp | datetime |
±---------------±---------+
User_id是该表的主键。
每一行都包含ID为user_id的用户的注册时间信息。
表: Confirmations
±---------------±---------+
| Column Name | Type |
±---------------±---------+
| user_id | int |
| time_stamp | datetime |
| action | ENUM |
±---------------±---------+
(user_id, time_stamp)是该表的主键。
user_id是一个引用到注册表的外键。
action是类型为(‘confirmed’, ‘timeout’)的ENUM
该表的每一行都表示ID为user_id的用户在time_stamp请求了一条确认消息,该确认消息要么被确认(‘confirmed’),要么被过期(‘timeout’)。
用户的 确认率 是 'confirmed' 消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为 0 。确认率四舍五入到 小数点后两位 。

编写一个SQL查询来查找每个用户的 确认率 。

以 任意顺序 返回结果表。

💻 代码实现

1
2
3
4
5
6
7
8
9
10
11
12
# Write your MySQL query statement below
SELECT t1.user_id,
ROUND(
IFNULL(
SUM(CASE WHEN t2.action = 'confirmed' THEN 1 ELSE 0 END)
/ NULLIF(
COUNT(t2.user_id), 0), 0), 2)
AS confirmation_rate
FROM Signups t1
LEFT JOIN Confirmations t2
ON t1.user_id=t2.user_id
GROUP BY t1.user_id

📊 性能分析

提交结果

  • 运行时间:1098ms击败36.88%