尊重原创:http://blog.csdn.net/love_java_cc/article/details/78268326
有如下一张表score:
建表语句:
CREATE TABLE `score` (`id` int NOT NULL AUTO_INCREMENT ,`name` varchar(20) NOT NULL ,`category` varchar(20) NOT NULL ,`score` int NOT NULL );
现在要去查询学生的各科成绩和总分,效果如下图,用SQL语句写出来
查询的sql如下:
select name,sum(case when category='语文' then score else 0 end) as '语文',
sum(case when category='数学' then score else 0 end) as '数学',
sum(case when category='英语' then score else 0 end) as '英语',
sum(score) as '总分' from score group by name;
小结:
case when与case ... when的区别
case when后面接的是某个表的字段的时候,then可以接另外一个字段,整个字段的查询结果是then后面的类型,如上面示例中,查语文成绩,then后面是score,是整型,那么查出来该字段也是整型;
case ... when 中,case后面就接了一个字段了,那么该语句查出来的结果,其类型与case后面的字段类型一致。如:case category when '语文' then ...;该语句中,case后面是category,是varchar类型,那么这条case...when语句查出来的结果也是varchar类型。