WITH t_tag_level as (
SELECT uid
,exam_id
,CASE
WHEN score >=90 THEN "优"
WHEN score >=75 THEN "良"
WHEN score >=60 THEN "中"
WHEN score <60 THEN "差"
END AS score_grade
,count(*) over(partition by level) as total
FROM exam_record
JOIN user_info USING(uid)
WHERE score IS NOT NULL
)
SELECT level
,score_grade
,ROUND(COUNT(score_grade) / total, 3) AS ratio
FROM user_info
JOIN t_tag_level USING(uid)
GROUP BY level,score_grade
ORDER BY level DESC, ratio DESC
- ,count(*) over(partition by level) as total是本部分重点