SQL数据库求和

来源:百度知道 编辑:UC知道 时间:2024/05/08 08:35:57
创建一个数据库;如下
create table tb(姓名 varchar(10),课程 varchar(10),分数 int)

insert into tb values('张三','语文',74)

insert into tb values('张三','数学',83)

insert into tb values('张三','物理',93)

insert into tb values('李四','语文',74)

insert into tb values('李四','数学',84)

insert into tb values('李四','物理',94)
然后按课程类型分类查询
select 姓名 as 姓名,

max(case 课程 when'语文' then 分数 else 0 end)语文,

max(case 课程 when'数学' then 分数 else 0 end)数学,

max(case 课程 when'物理' then 分数 else 0 end)物理

from tb

group by 姓名
怎么在下面加上一条各课程的总分 如:
李四 74 84 94
张三 74 83 93
148 167 187

select 姓名 as 姓名,

max(case 课程 when'语文' then 分数 else 0 end)语文,

max(case 课程 when'数学' then 分数 else 0 end)数学,

max(case 课程 when'物理' then 分数 else 0 end)物理

from tb

group by 姓名
union
select '',

sum(case 课程 when'语文' then 分数 else 0 end)语文,

sum(case 课程 when'数学' then 分数 else 0 end)数学,

sum(case 课程 when'物理' then 分数 else 0 end)物理

from tb

select 姓名 as 姓名,max(case 课程 when'语文' then 分数 else 0 end)语文,max(case 课程 when'数学' then 分数 else 0 end)数学,max(case 课程 when'物理' then 分数 else 0 end)物理 from tb group by 姓名
union all
select '' 姓名 ,sum(语文),sum(数学),sum(物理) from (
select 姓名 as 姓名,max(case 课程 when'语文' then 分数 else 0 end)语文,max(case 课程 when'数学' then 分数 else 0 end)数学,max(case 课程 when'物理' then 分数 else 0 end)物理 from tb group by 姓名
) a