CONCAT用法 | #未完成试卷数大于1的有效用户#
未完成试卷数大于1的有效用户
https://www.nowcoder.com/practice/46cb7a33f7204f3ba7f6536d2fc04286
select uid, sum(incomplete) incomplete_cnt, sum(complete) complete_cnt, group_concat(distinct detail separator ';') detail from (select uid, if(score is null or submit_time is null, 1, 0) incomplete, if(score is null or submit_time is null, 0, 1) complete, concat_ws(':', date(start_time), tag) detail from exam_record r left join examination_info i on r.exam_id = i.exam_id where year(start_time) = 2021) a group by uid having incomplete_cnt > 1 and incomplete_cnt < 5 and complete_cnt >= 1 order by incomplete_cnt desc;
concat()函数
首先我们先学一个函数叫concat()函数, 这个函数非常简单
功能:就是将多个字符串连接成一个字符串
语法:concat(字符串1, 字符串2,...) 字符串参数用逗号隔开!
返回值: 结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
concat_ws()函数
功能:concat_ws()函数 和 concat()函数一样,也是将多个字符串连接成一个字符串,但是可以指定分隔符!
语法:concat_ws(separator, str1, str2, ...) 第一个参数指定分隔符, 后面依旧是字符串
separator就是分隔符字符!
需要注意的是分隔符不能为null,如果为null,则返回结果为null。
group_concat()函数
接下来就要进入我们本文的主题了,group_concat()函数, 理解了上面两个函数的作用和用法 就对理解group_concat()函数有很大帮助了!
功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
注意: 中括号是可选的
分析: 通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。