建表语句
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后面的,可以带或者不带’’