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

异常的邮件概率

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这个语句的使用效率高

全部评论

相关推荐

在做测评的伊登很想奋...:别看了,简历没问题,中国人才太多了,所以显得没什么光辉,别怀疑,这水平进不去,那证明企业里边全是985。除了多投碰运气也没啥办法。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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