题解 | #筛选限定昵称成就值活跃日期的用户#

筛选限定昵称成就值活跃日期的用户

http://www.nowcoder.com/practice/2ed07ff8f67a474d90523b88402e401b

通过代码

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月都可以,就像我的通过代码,只判断了月份依然给过了。

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

没事我们会写就行。

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

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

学习,一天一个mysql

全部评论
我想请教一下,group by uid了,怎么还能出现nick_name和achievement呢
点赞 回复 分享
发布于 2022-09-22 20:00 浙江
你好 我的思路和你一样 没考虑判定最近一次 就是有错误输出不完整 不知道错哪了 大佬求指教 SELECT ui.uid, nick_name, achievement FROM user_info ui JOIN exam_record er ON ui.uid = er.uid JOIN practice_record pr ON ui.uid = pr.uid WHERE nick_name LIKE '牛客%号' and achievement BETWEEN 1200 and 2500 and (date_format(pr.submit_time, '%Y%m') = 202109 or date_format(er.start_time, '%Y%m') = 202109) GROUP BY ui.uid
点赞 回复 分享
发布于 2022-03-09 11:47

相关推荐

04-27 08:59
常州大学 Java
韵不凡:软件开发的工作需要博士吗?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务