需求
期末考试成绩出来了,结果需要分为不及格(0-59),合格(60-84),优秀(80+)三个段,老师需要统计每个段成绩的分布情况。
分数表score
结构如下:
id int
user_id int
score int
使用INTERVAL函数对学生成绩分段
SELECT user_id,score,INTERVAL(score,60,85) as step from score
INTERVAL
函数会根据score返回0(少于60),1(60-74),2(85以及以上)
将INTERVAL
返回的结果进行分组:
SELECT INTERVAL(score,60,85),COUNT(*) AS num as step from score GROUP BY INTERVAL(score,60,85)
得到:
0, 5
1, 80
2, 15
使用ELT函数为阶段命名
ETL方法会建立重命名,将1,2,3分别转化为不及格,合格,优秀,但是etl不能是从0开始的,所以我们可以在INTERVAL分组时加一个0,将0分以下的划分为0,0-59的划为1,依次类推
SELECT INTERVAL(score,0,60,85),COUNT(*) AS num as step from score GROUP BY INTERVAL(score,60,85)
得到:
1, 5
2, 80
3, 15
最终SQL:
SELECT ELT(INTERVAL(score,0,60,85),"不及格","合格","优秀"),COUNT(*) AS num as step from score GROUP BY ELT(INTERVAL(score,0,60,85),"不及格","合格","优秀")
得到:
不及格, 5
合格, 80
优秀, 15