题解 | #获取有奖金的员工相关信息。#

异常的邮件概率

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

解题思路

先思考如果要得到那个结果,那么期待的数据表是什么样子的?

分享下我的思考方式和过程,仅参考 :

  • 第一步:首先生成的表中的列一定是有是日期该日期中除去黑名单后的总邮件数目该日期中除去黑名单后,发送失败的总邮件数目

备注:因为这样就可以直接用发送失败的除以总的,来得到当日的发送失败率了。

  • 第二步:根据要求,要去除黑名单的人,那我们正式操作的第一步就将不是黑名单的信息全部捞出来。

这一步具体的代码如下:

select id, type, date
    from email 
    where send_id not in (select id from user where is_blacklist=1)
    and receive_id not in (select id from user where is_blacklist=1)

alt

  • 第三步:则是需要将该数据形式转换为第一步中我们期待的数据形式。

这里就需要使用行列转换啦。脑子里有没有浮现那个经典的【学生-科目-成绩】表的行列转换?这里也是同样道理的。

最终完整代码如下所示:

select date,
        round(sum(case when type='no_completed' then 1 else 0 end) / count(1),3) as 'p'
from (
    select id, type, date
    from email 
    where send_id not in (select id from user where is_blacklist=1)
    and receive_id not in (select id from user where is_blacklist=1)
    )s1 
group by date
;
全部评论

相关推荐

03-18 09:45
莆田学院 golang
牛客749342647号:佬,你这个简历模板是哪个,好好看
点赞 评论 收藏
分享
飞天大腚:小米能跟快手一个梯队吗 哈基seek你
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务