题解 | #分别满足两个活动的人#这题的难度不应该是中等,比有些较难和困难的还麻烦点

分别满足两个活动的人

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

解题时犯了一个错误。差点被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
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 22:48
牛马人的牛马人生:建议就是把北邮几个字放大就行了。北邮本硕按理来说完全不用担心啊
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务