題解 | #異常的郵件概率#
異常的郵件概率
http://fangfengwang8.cn/practice/d6dd656483b545159d3aa89b4c26004e
現(xiàn)在有一個需求,統(tǒng)計正常用戶
發(fā)送給正常用戶
郵件失敗的概率:
有一個郵件(email)表
,id
為主鍵, type
是枚舉類型,枚舉成員為(completed
,no_completed
),completed
代表郵件發(fā)送是成功的,no_completed
代表郵件是發(fā)送失敗的。
一個用戶(user)表
,id
為主鍵,is_blacklist
為0代表為正常用戶,is_blacklist
為1代表為黑名單用戶。
基本思路:
1 找到正常用戶:
1)找到發(fā)送名單中的正常用戶
2)找到收件名單中的正常用戶
2 按照DATE
分組
3 計算DATE
之中,失敗郵件數(shù)
4 計算DATE
之中,發(fā)送總郵件數(shù)
5 計算概率
6 將概率取小數(shù)點三位數(shù)
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這個語句的使用效率高