对试卷得分做min | 您所在的位置:网站首页 › c语言minmax函数 › 对试卷得分做min |
【场景】:min-max归一化 【分类】:窗口函数、嵌套子查询 分析思路(1)统计每个试卷的min(score)和max(score)-min(score) [条件]:where difficulty = hard [使用]:group by(2)统计执行min-max归一化后的数据 如果分组之后最大值等于最小值,即为某个试卷作答记录中只有一个得分 [条件]:where score is not null(3)最终根据uid,exam_id分组求均值得到new_score_avg,按照试卷ID升序、归一化分数降序输出 [使用]:group by uid,exam_id; order by exam_id,new_score_avg desc 扩展:总结了MySQL中不四舍五入取整、取小数、四舍五入取整、取小数、向下、向上取整的几种方法。前往查看:MySQL 不四舍五入取整、取小数、四舍五入取整、取小数、向下、向上取整 求解代码方法一 with子句 with main as( #按照试卷分组求出每个试卷的min(score)和max(score)-min(score) select distinct exam_id, min(score) as min_score, max(score)-min(score) as max_min_score from examination_info join exam_record using(exam_id) where difficulty = 'hard' group by exam_id ), main1 as( #统计执行min-max归一化后的数据 select uid, exam_id, min_score, max_min_score, score, if(max_min_score=0,score,100*(score-min_score)/max_min_score) as new_score from main join exam_record using(exam_id) where score is not null ) #根据uid,exam_id分组求均值得到new_score_avg,按照试卷ID升序、归一化分数降序输出 select uid, exam_id, round(avg(new_score),0) as new_score_avg from main1 group by uid,exam_id order by exam_id,new_score_avg desc方法二 from嵌套子查询 #根据uid,exam_id分组求均值得到new_score_avg,按照试卷ID升序、归一化分数降序输出 select uid, exam_id, round(avg(new_score),0) as new_score_avg from( #统计执行min-max归一化后的数据 select uid, exam_id, min_score, max_min_score, score, if(max_min_score=0,score,100*(score-min_score)/max_min_score) as new_score from( #按照试卷分组求出每个试卷的min(score)和max(score)-min(score) select distinct exam_id, min(score) as min_score, max(score)-min(score) as max_min_score from examination_info join exam_record using(exam_id) where difficulty = 'hard' group by exam_id ) main join exam_record using(exam_id) where score is not null ) main1 group by uid,exam_id order by exam_id,new_score_avg desc |
CopyRight 2018-2019 实验室设备网 版权所有 |