題解 | #SQL類別高難度試卷得分的截斷平均值#
SQL類別高難度試卷得分的截斷平均值
http://www.fangfengwang8.cn/practice/a690f76a718242fd80757115d305be45
WITH Rank_view AS( SELECT tag, difficulty, score, ROW_NUMBER() OVER(PARTITION BY a.exam_id ORDER BY score ASC) MIN_SCORE, ROW_NUMBER() OVER(PARTITION BY a.exam_id ORDER BY score DESC) MAX_SCORE FROM examination_info a LEFT JOIN exam_record b ON a.exam_id = b.exam_id WHERE tag = 'SQL' AND difficulty = 'hard' AND score IS NOT NULL ) SELECT tag, difficulty, ROUND(AVG(score), 1) FROM Rank_view WHERE MIN_SCORE > 1 AND MAX_SCORE > 1 GROUP BY tag, difficulty
題解:
1.任務:計算均值
2.限制:sql,hard,去掉一個最大值和最小值
思路:
可以先寫個普通的計算均值的代碼,然后發(fā)現(xiàn)需要找到,或者標識出不是最大值和最小值的得分
最先是想直接在查詢中用條件語句中使用極值函數(shù),但是報錯,因為是聚合函數(shù),需要使用groupby
因此采用臨時表的方式,使用開窗函數(shù)進行排序
1.創(chuàng)建臨時表,把限制條件進行書寫,得到較大范圍的限制結(jié)果,這里要注意必須在這里過濾掉沒有得分的記錄
2.根據(jù)順序和倒序排序過濾掉兩個極值,avg也是聚合函數(shù),因此最后要使用groupby,同時使用round函數(shù)保留一位小數(shù)