题目
原题对求职意向(用户信息表字段)有限制(关联该表,在where子句加条件就可实现);
同时要求输出第7到9条数据(limit),为简化题目,删除这2要求。
输出在注册当天就完成算法类试卷的用户的id、等级和最大得分。
表信息
试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间);
试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分);
用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间)
输出字段
用户编号:uid【from examination_info】;
用户等级:level【from user_info】;
注册时间:register_time 【from user_info】;
最大得分数:max_score【from examination_info】。
输出要求
1.最大得分降序输出;
思路
实现“注册当天就完成算法类试卷”这一条件,跟这篇有点像【SQL刷题】根据指定记录是否存在输出不同情况
相同在于:构建判断条件是否成立的flag字段。区别在于:这里是过滤分组结果,因此条件在having子句里写。
注意
是要完成的用户情况,需要加一个判断(submit_time是否为空)
实现
select
er.uid,
ui.level,
ui.register_time,
max(er.score) max_score
from exam_record er
left join user_info ui on er.uid=ui.uid
left join examination_info ei on er.exam_id=ei.exam_id
group by er.uid,ui.level,ui.register_time
having max(if(ei.tag='算法' and date(er.start_time)=
date(ui.register_time) and er.submit_time,1,0))=1
order by max_score desc