题解 | #筛选昵称规则和试卷规则的作答记录#

筛选昵称规则和试卷规则的作答记录

http://www.nowcoder.com/practice/1c5075503ccf4de1882976b2fff2c072

通过代码

SELECT
    e_r.uid,
    e_r.exam_id,
    ROUND(avg(score),0) avg_score
FROM
    user_info u_i
LEFT JOIN
    exam_record e_r
ON
    u_i.uid = e_r.uid
RIGHT JOIN
    examination_info e_i
ON
    e_r.exam_id = e_i.exam_id
WHERE
    tag LIKE 'c%'
    and (nick_name RLIKE '^牛客[0-9]*号$' OR nick_name RLIKE '^[0-9]*$')
    and score is NOT NULL
GROUP BY
    e_r.uid,e_r.exam_id
ORDER BY
    uid,avg_score

思路

找到昵称以"牛客"+纯数字+"号"或者纯数字组成的用户对于字母c开头的试卷类别(如C,C++,c#等)的已完成的试卷ID和平均得分,按用户ID、平均分升序排序

一个简单的三表连接然后正则筛选:

正则模式匹配:

当使用正则匹配时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,功能是一样的)。

其中涉及到的字符是:

“.” 匹配任何单个的字符

[…]” 表示匹配在方括号内的任何字符。如,”[abc]” 则匹配”a”、”b”或者”c”,“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。

“ * ”表示匹配零个或多个在它前面的东西。例如,“x *”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。

注意:正则表达式是区分大小写的,但是我们也能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”

一天一个Mysql 文章被收录于专栏

学习,一天一个mysql

全部评论

相关推荐

不愿透露姓名的神秘牛友
2025-11-05 08:26
面了100年面试不知...:哎呀,导师一不小心发现我要出去实习了,不同意,要不不让我毕业
点赞 评论 收藏
分享
牛客77743221...:做一段时间,公司出钱送你去缅甸和泰国旅游
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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