现在有一个需求,统计正常用户
发送给正常用户
邮件失败的概率:
有一个邮件(email)表
,id
为主键, type
是枚举类型,枚举成员为(completed
,no_completed
),completed
代表邮件发送是成功的,no_completed
代表邮件是发送失败的。
一个用户(user)表
,id
为主键,is_blacklist
为0代表为正常用户,is_blacklist
为1代表为黑名单用户。
基本思路:
1 找到正常用户:
1)找到发送名单中的正常用户
2)找到收件名单中的正常用户
2 按照DATE
分组
3 计算DATE
之中,失败邮件数
4 计算DATE
之中,发送总邮件数
5 计算概率
6 将概率取小数点三位数
SELECT date, ROUND(SUM(CASE WHEN type = 'no_completed' THEN 1 ELSE 0 END)/COUNT(e.id),3) AS p FROM email e JOIN user AS u1 ON u1.id = e.send_id JOIN user AS u2 ON u2.id = e.receive_id WHERE u1.is_blacklist = 0 AND u2.is_blacklist = 0 GROUP BY e.date ORDER BY e.date
CASE WHEN ... THEN ... ELSE ... END这个语句的使用效率高