表结构
1.使用group by+if或case when
select
name,
sum(case when subject='语文' then grade else 0 end)as'语文',
sum(case when subject='英语' then grade else 0 end)as'英语',
sum(case when subject='数学' then grade else 0 end)as'数学'
from TestUser group by name;
select
name,
sum(if(subject='语文',grade,0))as'语文',
sum(if(subject='英语',grade,0))as'英语',
sum(if(subject='数学',grade,0))as'数学',
sum(grade)as'total'
from TestUser group by name
union
select
'总计'as name,
sum(if(subject='语文',grade,0))as'语文',
sum(if(subject='英语',grade,0))as'英语',
sum(if(subject='数学',grade,0))as'数学',
sum(grade)as'total'
from TestUser
2.使用连表
select
t1.name,chinese,englih,`match`
from
(select name,grade as chinese from TestUser where subject='语文')t1
left join(select name,grade as englih from TestUser where subject='英语')t2 on t1.name=t2.name
left join(select name,grade as `match` from TestUser where subject='数学')t3 on t2.name=t3.name