通过代码

SELECT
    u_i.uid,
    nick_name,
    achievement
FROM
    exam_record e_r
RIGHT JOIN
    user_info u_i
ON
    e_r.uid = u_i.uid
LEFT JOIN
    practice_record p_r
ON
    u_i.uid = p_r.uid
WHERE
    (achievement BETWEEN 1200 and 2500
    and  u_i.nick_name LIKE '牛客_号')
    and  (e_r.start_time LIKE '_____09%'
    OR  month(p_r.submit_time) = 9)
GROUP by
    u_i.uid

思路

请找到昵称以『牛客』开头『号』结尾、成就值在1200~2500之间,且最近一次活跃(答题或作答试卷)在2021年9月的用户信息。

挺简单的没啥说的。

但是,

我最开始的代码不长这样

因为题目上说了是最后一次活跃,也就是说得按时间排序逆序,完事后group by 看看这个时间是不是2021-09

但是问题就在这里了

这样做反而有问题

我看了看别人的通过代码才知道,原来是这个题有问题

或者是题目的测试用例有问题

题上说最后一次,可实际上只要有过就行!甚至不管是不是2021年的9月都可以,就像我的通过代码,只判断了月份依然给过了。

我说为什么这题挺简单,通过率却不高。

没事我们会写就行。

我这里用了通配符%表示任意多个任意字符_表示一个任意字符