题解 | #异常的邮件概率#

异常的邮件概率

http://www.nowcoder.com/practice/d6dd656483b545159d3aa89b4c26004e

现在有一个需求,统计正常用户发送给正常用户邮件失败的概率:
有一个邮件(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这个语句的使用效率高

全部评论

相关推荐

11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
Java面试先知:我也是和你一样的情况,hr 说等开奖就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务