赞
踩
前言:目前博主从事一份电商方向的BA数据分析师的工作。目前的工作内容主要是指标的理解和使用SQL或视ETL实现指标需求。博主最近在实际工作中遇到了一个问题,就是不同人分等级的问题。下面直接通过实例进行解释,给问题进行思路和方法上的分析。
问题:表格中字段为不同学生id及其分数,其中,分数<60的为不及格,60=<分数<80的为中等,80=<分数<90的为良好,分数>=90的为优秀,求不同等级及对应的人数。
将表SCORE导入到Navicat(Mysql的一个编辑器)中,进行SQL查询
这里不在讲解如何将表格导入Navicat中,有疑问的可以评论或私信博主。
注:
1、上图中框选部分是创建一个新的临时表格temp_order以便于后续的查询,这种写法做题很少用,但在实际工作上中是一种比较普遍的写法。
2、实际贴数中,需求的模板一般都是按照升序排列的。因此为了贴数方便,我们可以在不同level前面加上序号01、02… …
-- 查看原始表格 SELECT * from score; -- 创建临时表,添加level字段 DROP TABLE IF EXISTS temp_order; CREATE TEMPORARY TABLE temp_order AS SELECT *, (case when score < 60 then '04_不及格' WHEN score >= 60 and score <70 then '03_中等' WHEN score >= 70 and score < 90 then '02_良好' ELSE '01_优秀' END) AS 'level' FROM score; -- 临时表 SELECT * from temp_order; -- 去重计数 SELECT level, COUNT(DISTINCT ID) AS STU_NUM from temp_order GROUP BY level;
注:使用CASE WHEN函数一定要考虑所有存在的情况,不能漏,CASE WHEN函数是查询中能根据已知列添加新列的函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。