题解 | #分别满足两个活动的人#

分别满足两个活动的人

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


全部评论

相关推荐

饼子吃到撑:当我看到外企的时候,我就知道这大概率可能是真的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务