题解 | #根据指定记录是否存在输出不同情况#

根据指定记录是否存在输出不同情况

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

需关注的地方在当有任意一个0级用户未完成试卷数大于2时输出每个0级用户的试卷未完成数和未完成率(保留3位小数)

with t1 as
(select b.uid uid,sum(if(submit_time is null and start_time is not null,1,0)) cn,count(start_time) cnt
from exam_record a
right join user_info b
on a.uid=b.uid
where level=0
group by a.uid
)
, 
t2 as
(select uid,sum(if(submit_time is null,1,0)) cn,count(start_time) cnt
 from exam_record
group by uid)
select if((select max(cn) from t1)>2,t1.uid,t2.uid) uid,if((select max(cn) from t1)>2,t1.cn,t2.cn),
       round(ifnull(if((select max(cn) from t1)>2,t1.cn/t1.cnt,t2.cn/t2.cnt),0),3) rate
from t1,t2
group by uid
order by rate;

全部评论
确实,会报错诶
1 回复 分享
发布于 2022-04-23 15:23
不行,会报错
点赞 回复 分享
发布于 2022-03-18 09:40
看了5,6个解析,还是你的答案最符合大众思维,一开始我也是这么想的,但是不会用临时表创造max(cn)。感谢分享。
点赞 回复 分享
发布于 2022-02-14 00:06

相关推荐

评论
6
收藏
分享

创作者周榜

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