题解 | #未完成试卷数大于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
滴滴
校招火热招聘中
官网直投

相关推荐

头像
05-12 09:14
点赞 评论 收藏
转发
6 收藏 评论
分享
牛客网
牛客企业服务