牛客SQL搞人心态的一天

异常的邮件概率

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

select
date,
cast( count(case when type='no_completed' then 1 else null end)*1.0 / count(id) as decimal(10,3)) 'p'
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;

两个in的效率不高,大规模数据可以用send_id和receive_id分别join两次user(虽然也挺亏的)
还有结果在sqlite跑不起来,小数点没有保留三位,虽然sqlite是可以用cast函数的。mysql结果正确。

全部评论
请问一下第三行没有 *1.0会不通过,这是什么原因呢?
点赞 回复 分享
发布于 2020-11-20 23:23
我稍微修改了一下代码,可以在sqlite里面跑了,效率的确不高 select date ,round(cast(count(case when type = 'no_completed' then 1 else null end) as double)/count(id),3) as p 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;
点赞 回复 分享
发布于 2021-09-28 20:45

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务