题解 | #未完成率较高的50%用户近三个月答卷情况#

未完成率较高的50%用户近三个月答卷情况

http://www.nowcoder.com/practice/3e598a2dcd854db8b1a3c48e5904fe1c

0.知识点

percent_rank() over() 按照数字所在的位置进行百分位分段

select * ,
    row_number()over(order by uid) row_number1, /*按照uid的大小不重不漏1 2 3 4 5 6 7 */
    rank()over(order by uid) rank1, /*按照uid的大小并列第一无第二,1 1 1 4 5 5 7*/
    dense_rank()over(order by uid) dense_rank1,/*按照uid的大小并列第一有第二,1 1 1  2 3 3 4*/
    percent_rank()over(order by uid) percent_rank1,/*按照uid的大小进行百分法排序*/
    ntile(2)over(order by uid) ntile1,/*按照uid的大小,把uid评价分成2组*/
    lead(uid)over(order by uid) lead1,/*把uid向上推1个位置*/
    lag(uid)over(order by uid) lag1 /*把uid向下推1个位置*/    
from user_id;

alt

1.给未完成率排序

Select er.uid,
          percent_rank() over ( order by 
        count(submit_time)/count(start_time))  as pr
          from exam_record as er
          join examination_info as ei
          on er.exam_id=ei.exam_id
          where tag='SQL'
          group by uid

2.取未完成率较高的50%

Select uid
     from 
         (Select er.uid,
          percent_rank() over ( order by 
        count(submit_time)/count(start_time))  as pr
          from exam_record as er
          join examination_info as ei
          on er.exam_id=ei.exam_id
          where tag='SQL'
          group by uid) as q1
     where pr<=0.5

3.取6.7级用户

select q2.uid
from 
    (Select uid
     from 
         (Select er.uid,
          percent_rank() over ( order by 
        count(submit_time)/count(start_time))  as pr
          from exam_record as er
          join examination_info as ei
          on er.exam_id=ei.exam_id
          where tag='SQL'
          group by uid) as q1
     where pr<=0.5) as q2
join user_info as ui
On q2.uid=ui.uid
Where level=6 or level=7

4.组装

select uid,start_month,count(start_time) as total_cnt,
count(submit_time) as complete_cnt
from
    (select *,date_format(start_time,'%Y%m') as start_month,
     dense_rank() over (partition by uid order by
            date_format(start_time,'%Y%m') desc) as rn
    from exam_record ) as q
where rn<=3 and uid in
(select q2.uid
from 
    (Select uid
     from 
         (Select er.uid,
          percent_rank() over ( order by 
        count(submit_time)/count(start_time))  as pr
          from exam_record as er
          join examination_info as ei
          on er.exam_id=ei.exam_id
          where tag='SQL'
          group by uid) as q1
     where pr<=0.5) as q2
join user_info as ui
On q2.uid=ui.uid
Where level=6 or level=7
)
group by uid,start_month
order by uid,start_month
全部评论

相关推荐

点赞 评论 收藏
分享
牛客633875330号:投不了,相当于空白简历,建议看看其他人简历上的项目和实习经历再说,。非科班无项目无实习,拿什么投计算机?
点赞 评论 收藏
分享
2024-12-29 11:08
湖南工业大学 Java
程序员牛肉:简历没什么大问题了。 而且不要再换项目了。三月份就开暑期实习了,现在都一月份了。实在来不及重新开一下项目了。把一个项目写完或许很快,但是把一个项目搞懂吃透并不简单。所以不要换项目了,把你简历上面的两个项目好好挖一挖吧。 具体 体现在:你能不能流利的说出你的项目的每一个功能点代码实现?你能不能说出在这块除了A技术之外,还有其他技术能够实现嘛?如果有其他技术能够实现,那你这块为什么选择了你当前用的这个技术?
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务