邮件发送失败的概率,除去发件人或收件人为黑名单的情况

异常的邮件概率

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

方法1(常规思路):表1(日期,失败个数)表2(日期,邮件总数) ,最后用日期连接两表,分子除以分母计算概率。
select t2.date
,round(t1.c1/t2.c2,3)as p
from
(select date,count(id) as c1 
from email
where send_id in(select id from user where is_blacklist=0)
and receive_id in(select id from user where is_blacklist=0)
and  type='no_completed'
group by date )t1
join
(select date,count(id) as c2
from email
where send_id in(select id from user where is_blacklist=0)
and receive_id in(select id from user where is_blacklist=0)
group by date )t2
on t1.date=t2.date
order by t2.date;
方法2:sum+case方法计算失败次数,使用子查询过滤黑名单。
select e.date
			,round(sum(case type when 'no_completed' then 1 else 0 end)/count(id),3) as p
from email e
where send_id in(select id from user where is_blacklist=0)
and receive_id in(select id from user where is_blacklist=0)
group by e.date
order by e.date;
方法3:sum+case方法计算失败次数,使用join过滤黑名单。同一个表可以join多次,取不同别名即可。
select e.date
	   ,round(sum(case type when 'no_completed' then 1 else 0 end)/count(e.id),3) as p
from email e
join user u1 on e.send_id = u1.id 
join user 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;






全部评论
方法1运行结果不会现实p为0的情况
1 回复 分享
发布于 2023-09-10 15:12 湖南
求助一下大佬,方法二where 后面换成 (send_id,receive_id) not in ( select id,id from user where is_blacklist =1) 为什么就不行了呢
点赞 回复 分享
发布于 2021-10-31 21:34
大赞,思路很清晰,学着用方法1实现了1遍。 首先我们要排除黑户,所以选出send_id和recieved_id都不是黑户的id。 随后依照选出的统计成功的和失败的,分成两张表 最后再连接两张表,计算比例即可。
点赞 回复 分享
发布于 10-19 10:09 广东

相关推荐

小马云表哥:我秋招一般是说要出国留学了
点赞 评论 收藏
分享
23 2 评论
分享
牛客网
牛客企业服务