SQL使用case when进行等级分组

SQL使用case when进行等级分组

前言:目前博主从事一份电商方向的BA数据分析师的工作。目前的工作内容主要是指标的理解和使用SQL或视ETL实现指标需求。博主最近在实际工作中遇到了一个问题,就是不同人分等级的问题。下面直接通过实例进行解释,给问题进行思路和方法上的分析。

问题:表格中字段为不同学生id及其分数,其中,分数<60的为不及格,60=<分数<80的为中等,80=<分数<90的为良好,分数>=90的为优秀,求不同等级及对应的人数。
在这里插入图片描述
将表SCORE导入到Navicat(Mysql的一个编辑器)中,进行SQL查询
这里不在讲解如何将表格导入Navicat中,有疑问的可以评论或私信博主。

1、查看原始表格

在这里插入图片描述

2、使用CASE WHEN流程控制函数基于成绩添加level字段

在这里插入图片描述
注:
1、上图中框选部分是创建一个新的临时表格temp_order以便于后续的查询,这种写法做题很少用,但在实际工作上中是一种比较普遍的写法。

2、实际贴数中,需求的模板一般都是按照升序排列的。因此为了贴数方便,我们可以在不同level前面加上序号01、02… …

3、查看创建的临时表

在这里插入图片描述

4、对上面临时表中level字段进行分组聚合,求每个level的人数。

在这里插入图片描述

完整代码如下:
-- 查看原始表格
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函数是查询中能根据已知列添加新列的函数。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值