题解 | #分别满足两个活动的人#
分别满足两个活动的人
https://www.nowcoder.com/practice/a126cea91d7045e399b8ecdcadfb326f
看到本题需要两个不同的字段纵向合并,第一反应是分别找出类别1对应的用户以及类别2对应的用户,然后进行union合并。这样拆解开来本题其实可以分为独立的两小题,
首先是找出类别1对应的用户,这个较简单,只需分组聚合求得每个用户最低得分超过85分的对象即可;
其次,对于类别2用户的查询,处理相对复杂,首先它需要用到两表连接,在此基础上找到答题耗时小于规定用时一半的数据,同时满足得分要大于80、难度为“高”的用户。
最后,将查询到的类别1数据和类别2数据使用union连接。代码如下:
select distinct uid, "activity1" activity from exam_record group by uid having min(score) >= 85 // ① 分组聚合,筛选各个试题最低得分超过85分的用户 union // ④ 纵向合并 select distinct uid, "activity2" activity from exam_record t1 left join examination_info t2 on t1.exam_id = t2.exam_id // ② 表连接:将exam_record表与examination_info表相连接作为数据源 where timestampdiff(minute, start_time, submit_time) < duration / 2 // ③ 时间戳函数,获取答题耗时,单位为分钟 and score > 80 and difficulty = "hard" order by uid asc关于时间戳函数timestampdiff参考链接:https://blog.csdn.net/Hudas/article/details/124351790