题解 | 异常的邮件概率
异常的邮件概率
https://www.nowcoder.com/practice/d6dd656483b545159d3aa89b4c26004e
SELECT
e.date AS email_date, -- 规范字段名,避免关键字冲突
ROUND(
SUM(CASE WHEN e.type = 'completed' THEN 0 ELSE 1 END) -- 未完成邮件数
/ NULLIF(COUNT(e.id), 0), -- 总邮件数(避免除以零)
3
) AS p -- 未完成邮件占比(保留3位小数)
FROM
email e
-- 关联发送方用户表,筛选非黑名单发送方
JOIN user u_send ON e.send_id = u_send.id AND u_send.is_blacklist = 0
-- 关联接收方用户表,筛选非黑名单接收方
JOIN user u1 ON e.receive_id = u1.id AND u1.is_blacklist = 0
GROUP BY
e.date -- 按日期分组(与SELECT中的日期字段一致)
ORDER BY
e.date ASC; -- 按日期升序排序
JOIN user u_send ON e.send_id = u_send.id AND u_send.is_blacklist = 0
user表连接email表
JOIN user u1 ON e.receive_id = u1.id AND u1.is_blacklist = 0
user表别名 u1 连接email表 (避免字段名冲突)