题解 | #未完成试卷数大于1的有效用户#
未完成试卷数大于1的有效用户
https://www.nowcoder.com/practice/46cb7a33f7204f3ba7f6536d2fc04286
SELECT uid, COUNT(if(submit_time, NULL, 1)) incomplete_cnt, COUNT(if(submit_time, 1, NULL)) complete_cnt, LEFT(REPLACE(GROUP_CONCAT(DISTINCT CONCAT_WS(':', DATE(start_time), tag), ';'), ',', ''), CHAR_LENGTH(REPLACE(GROUP_CONCAT(DISTINCT CONCAT_WS(':', DATE(start_time), tag), ';'), ',', ''))-1) detail FROM exam_record a LEFT JOIN examination_info b ON a.exam_id = b.exam_id WHERE YEAR(start_time) = 2021 GROUP BY uid HAVING incomplete_cnt > 1 AND incomplete_cnt<5 AND complete_cnt >= 1 ORDER BY uid DESC
任务:找到用户相关的整合信息
限制:1.2021年
2.uid降序
思路:
根据示例查询字段,未完成的就是没有提交时间的,case when 语句或者if函数即可,完成的就是相反。在最后一个字段,需要用到很多字符函数,可以由小到大,先组配日期和标签,再使用group_concat组配一个分组的全部,之后生成的结果不知道为啥每个都多了一个,,我服了,我的和别人的都是一样的啊,所以我直接replace掉,最后后面多了个;,所以使用left结合字符长度计算函数删除最后一个字符。
这道题涉及很多字符处理函数,如left,replace,group_concat和concat_ws等