题解 | #未完成试卷数大于1的有效用户#错了两次终于对了

未完成试卷数大于1的有效用户

http://www.nowcoder.com/practice/46cb7a33f7204f3ba7f6536d2fc04286

这道题目用到的数据合并之前我比较陌生,所以专门写一下。加深印象。 步骤一、数据合并: 刚看到题目的时候,大概就知道要用concat或group_concat。但查了一下,发现是两者皆要用。 concat,是以列为单位将数据合并。 group_concat,是以行为单位将数据合并。所以concat在括号内,先将单元格的数据按题意进行合并。 group_concat在括号外,将合并好的单元格按行合并。 但要注意要将数据按天简单处理下。以及使用ORDER BY 排序(题目没说,但测试输出的样式是排列的),将符号分隔符替换。 步骤二、数据运算 略过 步骤三、按要求写条件

太长不看版: 坑点1:数据合并时的符号要替换对。同时记得使用distinct 坑点2:有测试用例有分值不为空,答题时间为空的情况。(我觉得题目这里表述不清晰,没有明确完成或未完成) 坑点3:按未完成数有多到少(这个好判断) 坑点4:有效用户的定义

写在错误之前,在提交前,因为group by 内缺少distinct,一直无法通过测试用例,
参考大佬们的答案发现了问题,修正后通过了用例,兴冲冲的提交,于是,啪一下——

产生了错误1:
select uid,
sum(if(score is null,1,0)) incomplete_cnt,
sum(if(score is not null ,1 ,0)) complete_cnt,
group_concat(distinct concat(date_format(start_time,'%Y-%m-%d'),":",tag)
             order by start_time  SEPARATOR ';') detail
from exam_record e1
left join examination_info e2
 on e1.exam_id =e2.exam_id
 where start_time like '2021%'
 group by uid
 
having incomplete_cnt>1
order by incomplete_cnt desc
回过头来看题目,发现题目内有一个限制条件,叫有效用户。于是我立马在having中补充上条件,
一点测试,通过用例,我立马又兴冲冲的点击提交,啪一下——

产生了错误2
select uid,
sum(if(score is null,1,0)) incomplete_cnt,
sum(if(score is not null ,1 ,0)) complete_cnt,
group_concat(distinct concat(date_format(start_time,'%Y-%m-%d'),":",tag)
             order by start_time  SEPARATOR ';') detail
from exam_record e1
left join examination_info e2
 on e1.exam_id =e2.exam_id
 where start_time like '2021%'
 group by uid
 
having incomplete_cnt>1 and incomplete_cnt <5
and complete_cnt>=1
 order by incomplete_cnt desc
这一次我懵了,我的语句查出的数据比测试用例小,于是盲猜我可能漏了些条件。把测试代码复制进工作台,看了一眼数据有偏差的那个用户。发现,用户分值not null,但是交卷时间(submit_time) is null

于是最后一次调整了求和的逻辑条件。终于成功了。
select uid,
sum(if(submit_time is null,1,0)) incomplete_cnt,
sum(if(submit_time is not null ,1 ,0)) complete_cnt,
group_concat(distinct concat(date_format(start_time,'%Y-%m-%d'),":",tag)
             order by start_time  SEPARATOR ';') detail
from exam_record e1
left join examination_info e2
 on e1.exam_id =e2.exam_id
 where start_time like '2021%'
 
 group by uid
 
having incomplete_cnt>1 and incomplete_cnt <5
and complete_cnt>=1
 order by incomplete_cnt desc


全部评论

相关推荐

最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
12-06 01:10
已编辑
哈尔滨工程大学 Java
一面问的真细,二面不知为啥变双机位。9.29快手主站平时怎么学习&nbsp;AI&nbsp;的,国内外知名大模型,实习公司都用的什么大模型,怎么评估效果的java池化思想,线程池构造方法的核心参数,线程池中阻塞队列注意事项,submit方法参数和执行逻辑,shutdown和shutdownnow,核心线程允许过期吗threadlocal底层,为什么key是弱引用,key回收了再get或者set这个value会怎样aqs,如何保证公平性java代理java堆划分,新生代还有别的晋升老年代的情况吗,什么时候触发gc,gc失败抛什么异常,如何排查oom,导出dump命令redis数据结构,哪个底层是跳表,和其他数据结构对比布隆过滤器会出现大key问题吗,你咋实现的布隆过滤器你怎么实现redis分布式锁,可重入,续期聚簇索引非聚簇索引select语句会加锁吗,怎么实现的不加锁undolog&nbsp;redolog&nbsp;binlog怎么能让select加锁,update这个范围加的什么锁,update一条呢手撕简单01背包,接雨水10.10快手主站意图识别用的哪个大模型,走到意图和rag的比例,faq是点击的吗自然语言怎么识别的gap一年干啥了,转正怎么样没跟组里提意向吗,研究生研究方向是传统算法吗,会大模型微调吗注册场景为什么用布隆过滤器,原理分布式锁底层的key怎么拼的,value里是什么redis持久化zset底层mysql索引结构,一个表三个字段有主键唯一索引和没索引的字段会有几个b+树,聚簇索引非聚簇索引存的啥无手撕
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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