MYSQL-CASE WHEN语句使用

CASE WHEN使用

数据库准备:

// 创建数据库(schema):
CREATE DATABASE school;
// 创建数据表
CREATE TABLE `fraction` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `student_no` int(11) DEFAULT NULL,
  `course` char(10) DEFAULT NULL,
  `fraction` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
// 插入数据
INSERT INTO fraction (student_no, course, fraction) values (101, '语文', 100),(102, '语文', 90),(103, '语文', 88),(101, '数学', 99), (102, '数学', 67),(103,'数学',99),(101, '英语', 60),(102, '英语', 69),(103,'英语', 53);

fraction 表数据如下:

idstudent_nocoursefraction
1101语文100
2102语文90
3103语文88
4101数学99
5102数学67
6103数学99
7101英语60
8102英语69
9103英语53

有时我们需要使每行学号的所有学科成绩显示在同一行, 可以使用CASE WHEN来实现这个效果。

CASE WHEN 语句用法:

CASE WHEN 表达式
    THEN 输出
WHEN 表达式
    THEN 输出
ELSE 
     输出
END
  • CASE WHEN
SELECT  student_no, (CASE WHEN course = '语文' THEN fraction ELSE NULL END) AS CHINESE, (CASE WHEN course = '数学' THEN fraction ELSE NULL END) AS MATH, (CASE WHEN course = '英语' THEN fraction ELSE NULL END) AS english FROM fraction;

执行结果如下:

student_noCHINESEMATHenglish
101100NULLNULL
10290NULLNULL
10388NULLNULL
101NULL99NULL
102NULL67NULL
103NULL99NULL
101NULLNULL60
102NULLNULL69
103NULLNULL53

(用 CASE WHEN 语句分别对代表各个学科的"别名列"进行数据填充, 别名所代表的学科取对应学科所在行的fraction字段列的值, 其余行填充为NULL。)

  • MAX(CASE WHEN) + GROUP BY
SELECT  student_no, MAX(CASE WHEN course = '语文' THEN fraction ELSE NULL END) AS CHINESE, MAX(CASE WHEN course = '数学' THEN fraction ELSE NULL END) AS MATH, MAX(CASE WHEN course = '英语' THEN fraction ELSE NULL END) AS english FROM fraction GROUP BY student_no;

执行结果如下:

student_noCHINESEMATHenglish
1011009960
102906769
103889953

(以student_no进行分组, 并对student_no值相同的行保留fraction值最大的一行。先分组, 后取大,再填充 1 )


  1. SQL语句中GROUP BY执行顺序优先于SELSECT. ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值