现在有一个需求,统计正常用户发送给正常用户邮件失败的概率:
有一个邮件(email)表id为主键, type是枚举类型,枚举成员为(completedno_completed),completed代表邮件发送是成功的,no_completed代表邮件是发送失败的。
一个用户(user)表id为主键,is_blacklist0代表为正常用户is_blacklist1代表为黑名单用户

基本思路:
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这个语句的使用效率高