题解 | #未完成试卷数大于1的有效用户#

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

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

having和select的执行顺序

having的执行顺序在select之前,所以having最好还是不要使用别名。

但是在mysql当中支持在having使用别名,但是最好不要用。这里用了是怕看走眼

使用group_concat()来计算detail列

group_concat(distinct concat_ws(':', date(start_time), tag) separator ';') 是一个复杂的SQL表达式,用于将特定列的值组合成一个字符串,并在不同值之间使用分隔符。

  1. date(start_time): 这部分是一个日期函数,用于从 start_time 列中提取日期部分。
  2. concat_ws(':', date(start_time), tag): 这是一个字符串拼接函数。它将两个或多个字符串连接在一起,使用冒号 ":" 作为分隔符。在这里,它将日期和tag两个值连接起来,中间用冒号分隔。
  3. distinct: 这是一个关键字,确保在最终的结果中不会包含重复的值。如果有多个行具有相同的连接结果,只会保留一个。
  4. group_concat(...):这是一个聚合函数,用于将分组内的值连接成一个字符串。在这里,它将distinct concat_ws(...)的结果连接在一起。
  5. separator ';': 这是用于指定连接后的字符串中不同值之间的分隔符。在这里,分隔符是分号 ";"。

综合起来,group_concat(distinct concat_ws(':', date(start_time), tag) separator ';') 的作用是将不同的日期和标签组合成一个字符串,确保没有重复的组合

select er.uid,
       sum(if(submit_time is null,1,0)) as incomplete_cnt,
       sum(if(submit_time is not null,1,0)) as complete_cnt,
       group_concat(distinct concat_ws(':',date(start_time),tag) separator ';') as detail
from exam_record er left join examination_info ei on er.exam_id = ei.exam_id 
where year(start_time)=2021
group by er.uid
having complete_cnt>=1 and incomplete_cnt<5 and incomplete_cnt>1
order by incomplete_cnt desc;

全部评论

相关推荐

码农索隆:有点耳熟,你们是我教过最差的一届
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:05
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
昨天 10:56
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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