题解 | #筛选昵称规则和试卷规则的作答记录#
筛选昵称规则和试卷规则的作答记录
https://www.nowcoder.com/practice/1c5075503ccf4de1882976b2fff2c072
这题主要使用正则表达式进行筛选条件。
筛选条件:
1、昵称以"牛客"+纯数字+"号"或者纯数字组成的用户;
(nick_name RLIKE '^牛客[0-9]+号$' OR nick_name RLIKE '^[0-9]+$')
正则表达式函数用 RLIKE 或者 REGEXP;由于"牛客"+纯数字+"号"和纯数字是并集,所以要用()括起来
“^牛客[0-9]+号$ ”:意思是以牛客开头“^牛客”,匹配0-9任意字符一次“[0-9]+”,号结尾“号$”,或者
“^[0-9]+$”:以任意数字开头结尾的用户。
2、c开头的试卷类别(如C,C++,c#等);
tag RLIKE '^[cC]'匹配指定字符中的任意一个 方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。
3、已完成的试卷ID和平均得分。
score IS NOT NULL
ROUND(AVG(score))
完整代码:
SELECT c.uid, c.exam_id, ROUND(AVG(score)) AS avg_score FROM user_info a JOIN exam_record c USING (uid) JOIN examination_info b USING (exam_id) WHERE (nick_name RLIKE '^牛客[0-9]+号$' OR nick_name RLIKE '^[0-9]+$') AND tag RLIKE '^[cC]' AND score IS NOT NULL GROUP BY c.uid, c.exam_id ORDER BY c.uid, avg_score;