# 查询2021年里,所有每次试卷得分都能到85分的人的id和活动号
 # 使用if()函数是将指定值'activity1'与后面的别名区分,不然会运行报错
select uid, if(1=1, 'activity1', null) activity 
from exam_record er
where year(submit_time) = '2021'   # 仅留下2021年的答题记录
group by uid, if(1=1, 'activity1', null)
having min(score)>=85
# 查询2021年里,至少有一次用了一半时间就完成高难度试卷且分数大于80的人的id和活动号
select distinct uid, 'activity2'
from exam_record er
join examination_info ei
on er.exam_id=ei.exam_id
where year(submit_time) = '2021'
and difficulty='hard'
and timestampdiff(minute, start_time, submit_time)<duration/2
and score>80

------------------------------完整代码如下-----------------------------------
# 合并两个结果集,并按照用户id排序
select uid, if(1=1, 'activity1', null) activity
from exam_record er
where year(submit_time) = '2021'   # 仅留下2021年的答题记录
group by uid, if(1=1, 'activity1', null)
having min(score)>=85
union
select distinct uid, 'activity2'
from exam_record er
join examination_info ei
on er.exam_id=ei.exam_id
where year(submit_time) = '2021'
and difficulty='hard'
and timestampdiff(minute, start_time, submit_time)<duration/2
and score>80
order by uid;

后来看大家的题解,发现直接用as指定别名就可以防止值与别名混淆了。不用使用if()