Mysql:case when then end 的用法

Posted 小白ii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql:case when then end 的用法相关的知识,希望对你有一定的参考价值。

1、创建一张表,我们这表名为 t_score

drop table if exists t_score;
create table t_score
(
	id int primary key auto_increment,
	name varchar(20),
	course varchar(20),
	score double
) default charset = utf8;

2、添加若干条数据

insert into `t_score`(name,course,score) values
    (\'王海\', \'语文\', 86),
    (\'王海\', \'数学\', 83),
    (\'王海\', \'英语\', 93),
    (\'陶俊\', \'语文\', 88),
    (\'陶俊\', \'数学\', 84),
    (\'陶俊\', \'英语\', 94),
    (\'刘可\', \'语文\', 80),
    (\'刘可\', \'数学\', 86),
    (\'刘可\', \'英语\', 88),
    (\'李春\', \'语文\', 89),
    (\'李春\', \'数学\', 80),
    (\'李春\', \'英语\', 87);

3、用case when then end 函数进行查询

SELECT name,
max(CASE course WHEN \'语文\' THEN score ELSE 0 END ) Chinese,
max(CASE course WHEN \'数学\' THEN score ELSE 0 END ) math,
max(CASE course WHEN \'英语\' THEN score ELSE 0 END ) English,
sum(score) score
FROM t_score  
GROUP BY name
union
select \'TOTAL\',
sum(CASE course WHEN \'语文\' THEN score ELSE 0 END ),
sum(CASE course WHEN \'数学\' THEN score ELSE 0 END ),
sum(CASE course WHEN \'英语\' THEN score ELSE 0 END ),
sum(score) from t_score;

效果图:

 

另一种方法获取所需结果

利用with rollup 给结果集新添一行,再使用ifnull过程函数判断name的值是否为空

select ifnull(name,\'TOTAL\') name,
sum(CASE course WHEN \'语文\' THEN score ELSE 0 END ) Chinese,
sum(CASE course WHEN \'数学\' THEN score ELSE 0 END ) math,
sum(CASE course WHEN \'英语\' THEN score ELSE 0 END ) English,
sum(score) score
FROM t_score  
GROUP BY name with rollup;

 

以上是关于Mysql:case when then end 的用法的主要内容,如果未能解决你的问题,请参考以下文章

mysql操作查询结果case when then else end用法举例

mysql操作查询结果case when then else end用法举例

mysql 中 case when then .... else end 的简单使用

MySql 中关键字 case when then else end 的用法

Mysql:case when then end 的用法

MYSQL中case when then else end 用法