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

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

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

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

关键问题1.在于最后一个条件筛选“最近一次活跃(答题或作答试卷)在2021年9月的uid” ,根据常规字面理解用uid或者在试卷作答的表格内最近月份是2109 或者在试卷练习的表格内最近月份是2109 即可。两个或则的代码最外面加一个()表示先对括号内的或语句进行预算,再和外面的nickname、成就一起限定条件筛选。

如果或语句最外面不加括号,则默认先进行整个条件筛选and的运算,再进行or的运算,这样得到的结果范围就更大,就不对了。

关键问题2.nickname中必须以牛客开头、号结尾,使用like ‘牛客%号’的语句,中间符号“%”表示任意字符。

如果觉得两个or语句写的太麻烦,用一下union的语句逻辑也一样。

这个是传统思维:


SELECT uid, nick_name, achievement FROM user_info 
WHERE nick_name LIKE '牛客%号' AND achievement BETWEEN 1200 AND 2500 
AND (uid IN 
     	(
    	SELECT uid FROM exam_record 
    	GROUP BY uid
    	HAVING MAX(DATE_FORMAT(start_time,'%y%m'))='2109'
    	)  
    OR uid IN
    	(
     	SELECT uid FROM practice_record 
     	GROUP BY uid 
     	HAVING MAX(DATE_FORMAT(submit_time,'%y%m'))='2109'
     	)
     )

这个是union语句(能少写两句话??)


SELECT uid, nick_name, achievement FROM user_info 
WHERE nick_name LIKE '牛客%号' AND achievement BETWEEN 1200 AND 2500 
AND uid IN (
    	SELECT uid FROM exam_record 
    	GROUP BY uid
    	HAVING MAX(DATE_FORMAT(start_time,'%y%m'))='2109'
    UNION
     	SELECT uid FROM practice_record 
     	GROUP BY uid 
     	HAVING MAX(DATE_FORMAT(submit_time,'%y%m'))='2109'
     )

全部评论

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
01-08 09:40
中南大学 Java
苏苏加油努力:你的女神不回你消息,并且给别的男生发消息 be like
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务