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

分别满足两个活动的人

https://www.nowcoder.com/practice/a126cea91d7045e399b8ecdcadfb326f

select distinct uid, 'activity1' AS activity
FROM  exam_record
WHERE YEAR(start_time) = '2021'
GROUP BY uid
HAVING MIN(score) >= 85

# 至少有一次用了一半时间就完成高难度试卷且分数大于80的
union
select distinct uid, 'activity2' AS activity
FROM exam_record AS er
JOIN examination_info AS ei using(exam_id)
WHERE score > 80 AND difficulty = 'hard' AND 
TIMESTAMPDIFF(SECOND, start_time, submit_time) * 2 <= duration * 60
AND YEAR(start_time) = '2021'        
ORDER BY uid
  • 每次试卷得分都能到85分的人(activity1),要根据uid分组,如果每个uid的最小分数都大于85就满足条件
  • 至少有一次用了一半时间就完成高难度试卷且分数大于80的,这个是至少有一次,即有就行了,不需要对uid进行分组,但是要对uid进行去重distinct
  • 算时间差函数

TIMESTAMPDIFF(SECOND, start_time, submit_time) 第一个参数指定时间差的单位(年月日时分秒) 第二个参数是开始时间,第 三 个参数是结束时间

  • 合并两个查询结果用union all
  • union all 和union 的区别 UNION ALL 返回所有 SELECT 语句生成的行,包括重复行。它简单地将多个结果集合并在一起,不去除重复行或执行任何类型的排序。UNION 也用于合并多个 SELECT 语句的结果集,但它会自动去除重复的行。这意味着如果两个 SELECT 语句的结果集中存在相同的行,则 UNION 只会返回其中的一行,而不会返回重复的行。
全部评论

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务