题解 | #未完成试卷数大于1的有效用户#(有一些纰漏,还请担待一些)

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

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

这题我的问题是:

1.detail 如何插入多个数据 其中包含里面的 日期和tag

最后看完答案找到的解决思路。

写 detail 的思路是先用 concat 将日期对应的tag一并提取出来,然后对他们进行 ,其中distinct 是用来 对取出的数据进行区分的

因为有可能会出现 某一张试卷在同一天被做过之后 然后又不小心被自己打开(原因之一),但是因为做过不想浪费时间就没有做,导致试卷一直搁置在哪里了

再使用 group_concat 来进行分组 分组是依据的 uid为条件进行的分组。和第二种的区别只是少了一个 order by

----------------------------------------------------------------------------------------------------------------


#

select uid,
       count(ww) as incomplete_cnt,
       count(pp) as complete_cnt,#  这行我刚开始是直接选择用score去求,因为count 是具有去null的作用的,但是看输入案例发现有一列 1003 9001有个小BUG有分无提交时间  但是我们是按照submit_time来区分的,所以就出现了错误
#       concat(data_format(start_time,'%Y%m%d'),':',tag)
       
       GROUP_CONCAT(distinct CONCAT(DATE_FORMAT(start_time,'%Y-%m-%d'),':',tag) order by start_time SEPARATOR ";") as detail
#↓----↓----↓----↓----↓----↓----↓第二种快一些的取出具体日期的方法↓----↓----↓----↓----↓----↓----↓----↓----↓----↓----↓----↓----↓----↓
#      group_concat(distinct concat_ws(':', date(start_time), tag) SEPARATOR ';') as detail

from 
(
select uid,score,
       case when submit_time is null then 1 else null end as ww,
       case when submit_time is not null then 1 else null end as pp,
       tag,
       start_time
from exam_record er
left join examination_info ei on er.exam_id = ei.exam_id
) a#  其实也可以使用 连接直接取出数据了,但是我为了 方便理解一些 选择了这种方法:就是先做出一个新的表格,里面包含了题干要求的信息,
   #  然后我再在这个新表里面取出我想要取出的数据


where year(start_time) = '2021'   #  写的时候还少了这行   老是忘记了这个条件
group by uid
having incomplete_cnt > 1 and complete_cnt >=1 and incomplete_cnt <5  #  本来这两行只写有一行 where,然而where 是不能使用新的列名的,这个我给忘了,需要使用having  ing嘛说明是可以使用表格里面的新列名的。
order by uid desc
全部评论
为什么不能直接写1 < incomplete_cnt < 5,
1 回复 分享
发布于 2022-08-19 17:18 重庆
里面也有一些自己在写题的时候出错时候的改错和标记的错误
点赞 回复 分享
发布于 2022-03-10 21:07

相关推荐

03-21 15:33
惠州学院 市场
点赞 评论 收藏
分享
小厂面经,也是我的处女面(30min)1.自我介绍2.spring&nbsp;boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring&nbsp;task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务