SQL中的case when函数使用

建表语句

create table testScore    
(       
   tname varchar(30) null,    
   ttype varchar(10) null,    
   tscor int null   
);    
 
insert into testScore values ('张三','语文',80);   
insert into testScore values ('张三','数学',98);    
insert into testScore values ('张三','英语',65);    
insert into testScore values ('李四','语文',70);    
insert into testScore values ('李四','数学',80);    
insert into testScore values ('李四','英语',90);    

查询一个学生的所有科目成绩

select
   tname as '姓名' ,     
   max(case ttype when '语文' then tscor else 0 end) '语文',     
   max(case ttype when '数学' then tscor else 0 end) '数学',     
   max(case ttype when '英语' then tscor else 0 end) '英语'     
from testScore     
group by tname

结果为:

+------+------+------+------+
| 姓名 | 语文 | 数学 | 英语 |
+------+------+------+------+
| 张三 |   80 |   98 |   65 |
| 李四 |   70 |   80 |   90 |
+------+------+------+------+

求每名学生文科(语文和英语)和理科的成绩

select 
      tname as '姓名',
      case
          when ttype='数学' then '理科'
          else '文科'
      end as '科别',
      sum(tscor) as '总分'
from testscore
group by 
      tname,
      case
          when ttype='数学' then '理科'
          else '文科'
      end

结果为:

+------+------+------+
| 姓名 | 科别 | 总分 |
+------+------+------+
| 张三 | 理科 |   98 |
| 张三 | 文科 |  145 |
| 李四 | 理科 |   80 |
| 李四 | 文科 |  160 |

今天写代码的时候犯了一个错误,group by时直接把上面的代码复制进来

SELECT
	tname AS '姓名',
CASE
		
		WHEN ttype = '数学' THEN
		'理科' ELSE '文科' 
	END AS '科别',
	sum( tscor ) AS '总分' 
FROM
	testscore 
GROUP BY
	tname,
CASE
		
		WHEN ttype = '数学' THEN
	'理科' ELSE '文科' 
	END AS '科别'

会报错

check the manual that corresponds to your MySQL server version for the right syntax 
to use near 'as '科别'' at line 14

避免出现上述错误,可以使用

SELECT
	tname AS '姓名',
CASE
		
		WHEN ttype = '数学' THEN
		'理科' ELSE '文科' 
	END AS '科别',
	sum( tscor ) AS '总分' 
FROM
	testscore 
GROUP BY
	tname,
	科别

科别在group by字段那里是必须不带’‘的,end as后面的,可以带或者不带’’

发布了35 篇原创文章 · 获赞 12 · 访问量 6631

猜你喜欢

转载自blog.csdn.net/u012955829/article/details/103059663