首页 > 试题广场 >

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

[编程题]筛选限定昵称成就值活跃日期的用户
  • 热度指数:42478 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):

试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分):

题目练习记录表practice_record(uid用户ID, question_id题目ID, submit_time提交时间, score得分):

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

由示例数据结果输出如下:

解释:昵称以『牛客』开头『号』结尾且成就值在1200~2500之间的有1002、1004;
1002最近一次试卷区开始作答时间2021年9月,交卷时间为2021年9月;1004最近一次试卷区开始作答时间为2021年8月,未交卷。
因此最终满足条件的只有1002。
示例1

输入

drop table if exists user_info,exam_record,practice_record;
CREATE TABLE user_info (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int UNIQUE NOT NULL COMMENT '用户ID',
    `nick_name` varchar(64) COMMENT '昵称',
    achievement int COMMENT '成就值',
    level int COMMENT '用户等级',
    job varchar(32) COMMENT '职业方向',
    register_time datetime COMMENT '注册时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE practice_record (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    question_id int NOT NULL COMMENT '题目ID',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE exam_record (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    exam_id int NOT NULL COMMENT '试卷ID',
    start_time datetime NOT NULL COMMENT '开始时间',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO user_info(uid,`nick_name`,achievement,level,job,register_time) VALUES
  (1001, '牛客1号', 1000, 2, '算法', '2020-01-01 10:00:00'),
  (1002, '牛客2号', 1200, 3, '算法', '2020-01-01 10:00:00'),
  (1003, '进击的3号', 2200, 5, '算法', '2020-01-01 10:00:00'),
  (1004, '牛客4号', 2500, 6, '算法', '2020-01-01 10:00:00'),
  (1005, '牛客5号', 3000, 7, 'C++', '2020-01-01 10:00:00');

INSERT INTO practice_record(uid,question_id,submit_time,score) VALUES
(1001, 8001, '2021-08-02 11:41:01', 60),
(1002, 8001, '2021-09-02 19:30:01', 50),
(1002, 8001, '2021-09-02 19:20:01', 70),
(1002, 8002, '2021-09-02 19:38:01', 70),
(1003, 8002, '2021-09-01 19:38:01', 80);

INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2020-01-02 09:01:01', '2020-01-02 09:21:59', 80),
(1001, 9001, '2021-05-02 10:01:01', null, null),
(1001, 9002, '2021-02-02 19:01:01', '2021-02-02 19:30:01', 87),
(1001, 9001, '2021-06-02 19:01:01', '2021-06-02 19:32:00', 20),
(1001, 9002, '2021-09-05 19:01:01', '2021-09-05 19:40:01', 89),
(1001, 9002, '2021-09-01 12:01:01', null, null),
(1002, 9002, '2021-05-05 18:01:01', '2021-05-05 18:59:02', 90),
(1003, 9003, '2021-02-06 12:01:01', null, null),
(1003, 9001, '2021-09-07 10:01:01', '2021-09-07 10:31:01', 89),
(1004, 9002, '2021-08-06 12:01:01', null, null),
(1002, 9001, '2020-01-01 12:01:01', '2020-01-01 12:31:01', 81),
(1002, 9002, '2020-02-01 12:01:01', '2020-02-01 12:31:01', 82),
(1002, 9002, '2020-02-02 12:11:01', '2020-02-02 12:31:01', 83),
(1005, 9001, '2021-02-01 11:01:01', '2021-02-01 11:31:01', 84),
(1006, 9001, '2021-02-01 11:01:01', '2021-02-01 11:31:01', 84),
(1002, 9001, '2021-09-06 12:01:01', '2021-09-06 12:21:01', 80),
(1002, 9001, '2021-09-06 12:01:01', null, null),
(1002, 9001, '2021-09-07 12:01:01', null, null);

输出

1002|牛客2号|1200
头像 猫波波
发表于 2022-01-14 12:43:51
SELECT uid, nick_name, achievement FROM user_info WHERE nick_name LIKE '牛客%号' AND achievement BETWEEN 1200 AND 2500 AND uid IN ( 展开全文
头像 无上清颜
发表于 2021-11-30 15:19:10
with t as ( select t.uid, t.nick_name, t.achievement, t1.start_time, t2.submit_time from user_info t join exam_record t1 展开全文
头像 摸鱼学大师
发表于 2021-10-25 13:07:24
SQL38 筛选限定昵称成就值活跃日期的用户 题目主要信息: 找到昵称以『牛客』开头『号』结尾、成就值在1200~2500之间,且最近一次活跃(答题或作答试卷)在2021年9月的用户信息 问题拆分: 先从表exam_record中筛选出月份是2021年9月提交的用户ID。where date_ 展开全文
头像 盐咸咸
发表于 2022-03-04 12:01:09
一、知识总结拓展&答案 1、知识点总结与拓展 1)字符串截取 从左边截取字符串:left(字段名,n) 从左边第n个开始取到最右边 从右边截取字符串:right(字段名,n)从右边地n个开始取到最左边 从中间开 展开全文
头像 人生苦短,但求成长
发表于 2022-03-15 19:57:54
select uid,nick_name,achievement from user_info where nick_name like '牛客%号' and achievement >= 1200&nb 展开全文
头像 酸菜鱼土豆大侠
发表于 2022-11-17 17:37:43
【场景】:模糊查询、在...之间 【分类】:比较运算符、like、between 分析思路 难点: 1.最近一次活跃(答题或作答试卷)在2021年9月的用户信息 条件 需要查询出每个用户最近活跃(答题或作答试卷)的日期才能判断这个日期是否在2021年9月 (1)合并用户答题或作答试卷记录 [使 展开全文
头像 玉树叶
发表于 2021-12-05 12:53:11
通过代码 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 p 展开全文
头像 牛客364081899号
发表于 2022-02-13 12:29:32
问题:请找到昵称以『牛客』开头『号』结尾、成就值在1200~2500之间,且最近一次活跃(答题或作答试卷)在2021年9月的用户信息。 关键问题1.在于最后一个条件筛选“最近一次活跃(答题或作答试卷)在2021年9月的uid” ,根据常规字面理解用uid或者在试卷作答的表格内最近月份是2109 或者 展开全文
头像 webary
发表于 2021-11-20 19:10:37
明确题意: 找到昵称以『牛客』开头『号』结尾、成就值在1200~2500之间且最近一次活跃(答题或作答试卷)在2021年9月的用户信息 问题分解: 筛选用户条件: 昵称以『牛客』开头『号』结尾:WHERE nick_name LIKE "牛客%号" 成就值在1200~2500之间:achiev 展开全文
头像 二号技师
发表于 2022-06-13 22:49:24
最简单的写法了应该是 select uid,nick_name,achievement from user_info a left join exam_record b using(uid) left join practice_record c using(uid) where nick_nam 展开全文