返回介绍

限量查询

发布于 2024-08-17 15:49:00 字数 8289 浏览 0 评论 0 收藏 0

注册时间最早的三个人

描述

现有用户信息表 user_infouid 用户 ID, nick_name 昵称, achievement 成就值, level 等级, job 职业方向, register_time 注册时间):

iduidnick_nameachievementleveljobregister_time
11001牛客 1 号190算法2020-01-01 10:00:00
21002牛客 2 号12003算法2020-02-01 10:00:00
31003牛客 3 号 ♂220算法2020-01-02 10:00:00
41004牛客 4 号250算法2020-01-02 11:00:00
51005牛客 555 号40007C++2020-01-11 10:00:00
6100666666630006C++2020-11-01 10:00:00

请从中找到注册时间最早的 3 个人。由示例数据结果输出如下:

uidnick_nameregister_time
1001牛客 12020-01-01 10:00:00
1003牛客 3 号 ♂2020-01-02 10:00:00
1004牛客 4 号2020-01-02 11:00:00

解释:按注册时间排序后选取前三名,输出其用户 ID、昵称、注册时间。

答案

SELECT uid, nick_name, register_time
    FROM user_info
    ORDER BY register_time
    LIMIT 3

注册当天就完成了试卷的名单第三页(较难)

描述 :现有用户信息表 user_infouid 用户 ID, nick_name 昵称, achievement 成就值, level 等级, job 职业方向, register_time 注册时间):

iduidnick_nameachievementleveljobregister_time
11001牛客 1190算法2020-01-01 10:00:00
21002牛客 2 号12003算法2020-01-01 10:00:00
31003牛客 3 号 ♂220算法2020-01-01 10:00:00
41004牛客 4 号250算法2020-01-01 10:00:00
51005牛客 555 号40007算法2020-01-11 10:00:00
61006牛客 6 号250算法2020-01-02 11:00:00
71007牛客 7 号250算法2020-01-02 11:00:00
81008牛客 8 号250算法2020-01-02 11:00:00
91009牛客 9 号250算法2020-01-02 11:00:00
101010牛客 10 号250算法2020-01-02 11:00:00
11101166666630006C++2020-01-02 10:00:00

试卷信息表 examination_info(exam_id 试卷 ID, tag 试卷类别, difficulty 试卷难度, duration 考试时长, release_time 发布时间):

idexam_idtagdifficultydurationrelease_time
19001算法hard602020-01-01 10:00:00
29002算法hard802020-01-01 10:00:00
39003SQLmedium702020-01-01 10:00:00

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

iduidexam_idstart_timesubmit_timescore
1100190012020-01-02 09:01:012020-01-02 09:21:5980
2100290032020-01-20 10:01:012020-01-20 10:10:0181
3100290022020-01-01 12:11:012020-01-01 12:31:0183
4100390022020-01-01 19:01:012020-01-01 19:30:0175
5100490022020-01-01 12:01:012020-01-01 12:11:0160
6100590022020-01-01 12:01:012020-01-01 12:41:0190
7100690012020-01-02 19:01:012020-01-02 19:32:0020
8100790022020-01-02 19:01:012020-01-02 19:40:0189
9100890032020-01-02 12:01:012020-01-02 12:20:0199
10100890012020-01-02 12:01:012020-01-02 12:31:0198
11100990022020-01-02 12:01:012020-01-02 12:31:0182
12101090022020-01-02 12:11:012020-01-02 12:41:0176
13101190012020-01-02 10:01:012020-01-02 10:31:0189

找到求职方向为算法工程师,且注册当天就完成了算法类试卷的人,按参加过的所有考试最高得分排名。排名榜很长,我们将采用分页展示,每页 3 条,现在需要你取出第 3 页(页码从 1 开始)的人的信息。

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

uidlevelregister_timemax_score
101002020-01-02 11:00:0076
100302020-01-01 10:00:0075
100402020-01-01 11:00:0060

解释:除了 1011 其他用户的求职方向都为算法工程师;算法类试卷有 9001 和 9002,11 个用户注册当天都完成了算法类试卷;计算他们的所有考试最大分时,只有 1002 和 1008 完成了两次考试,其他人只完成了一场考试,1002 两场考试最高分为 81,1008 最高分为 99。

按最高分排名如下:

uidlevelregister_timemax_score
100802020-01-02 11:00:0099
100572020-01-01 10:00:0090
100702020-01-02 11:00:0089
100232020-01-01 10:00:0083
100902020-01-02 11:00:0082
100102020-01-01 10:00:0080
101002020-01-02 11:00:0076
100302020-01-01 10:00:0075
100402020-01-01 11:00:0060
100602020-01-02 11:00:0020

每页 3 条,第三页也就是第 7~9 条,返回 1010、1003、1004 的行记录即可。

思路

  1. 每页三条,即需要取出第三页的人的信息,要用到 limit
  2. 统计求职方向为算法工程师且注册当天就完成了算法类试卷的人的 信息和每次记录的得分 ,先求满足条件的用户,后用 left join 做连接查找信息和每次记录的得分

答案

SELECT t1.uid,
       LEVEL,
       register_time,
       max(score) AS max_score
FROM exam_record t
JOIN examination_info USING (exam_id)
JOIN user_info t1 ON t.uid = t1.uid
AND date(t.submit_time) = date(t1.register_time)
WHERE job = '算法'
  AND tag = '算法'
GROUP BY t1.uid,
         LEVEL,
         register_time
ORDER BY max_score DESC
LIMIT 6,3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文