解题时犯了一个错误。差点被group by 分组后的数据误导

思路是按照题目要求的条件分别求出符合两种结果的数据最后再合并结果。 条件1:每次测试成绩>=85,也就是测试次数=获得85分的次数。 条件2:Hard难度、分数大于80、解题时间小于30分钟。

题目要求的是2021年内,提交后发现不增加这个条件也能通过。 第二段的求类型2的时候,一开始写的是<=duration/2。发现不用group by 输出的结果会使1003同时获得两个标签“1和2”。使用了group by 输出的结果是用例的结果。但无法在网页上提交(显示的是group by 。。。。那段英文) 再次核对题目要求之后,修改成<duration/2。去掉第二段的group by。 结果通过。 如果没有做这个修改,提交的结果能通过题目的用例,但应该最后还是会报错。因为分组后其他列值是原组内随机的一个值。只是因为刚好那个值符合要求,输出结果才准确。

select uid,activity from (
select uid,if (count(uid) = sum(if(score>='85',1,0)),'activity1',null) activity
from examination_info e1
join exam_record e2
on e1.exam_id=e2.exam_id
group by uid
union all
select uid,
if(timestampdiff(minute,start_time,submit_time) #换算成分钟
   < duration/2 #考虑到可能会有题目的答题时间并不是60分钟,直接用字段值折半。
and difficulty = 'hard' and score > '80' , 'activity2',null) activity
from examination_info e1 join exam_record e2
on e1.exam_id=e2.exam_id
) a
where activity is not null
order by uid