mysql这个查询怎么整?

大连巴掌 发布于 05/03 20:58
阅读 298
收藏 1

各位大神,如上图,怎么能做到?

加载中
0
前端大师傅
前端大师傅

这个题目就是考察的SQL里面一个很重要的技巧行列转换:

select k.id 考号,k.school 学校, k.student 学生,
sum(
case when s.title = '语文' then c.de_fen else 0 end
) as 语文,
sum(
case when s.title = '数学' then c.de_fen else 0 end
) as 数学,
sum(
case when s.title = '英语' then c.de_fen else 0 end
) as 英语
from
chengji c
left join subject s on s.id  = c.subject_id
left join kaohao k on k.id = c.kaohao_id
group by kaohao_id

当然如果要是做成动态的话,这个SQL应该是动态拼接的:

1.如果SQL中做的话,就需要使用游标把每一行的数据取出放到变量中再拼接成SQL,然后执行。

2.如果在程序中做的话,也是先查询subject表,再把里面每一门课的名称取出来,动态拼接SQL。

 

0
CAFEDADA
CAFEDADA

作业请自己写

0
大连巴掌
大连巴掌
不是作业😰,大学老师都留这个作业吗?
0
H
HF_rhce

这不就是简单的多表联查嘛

0
m睡意zzz
m睡意zzz

用虚表,也就是视图

create view MATH
as 
select kaohao.id as id student,defen as math
from kaohao subject chengji
where subject.id = select subject.id
                   from subject
                   where title = '数学'
//如此建立,语文(CHINESE),英语(ENGLISH)的视图,如果查询次数多,建议直接建表
create view table4 (考号,学校,学生,语文,数学,英语)
as
select kaohao.id,school,kaohao.student,chinese,math,english
from kaohao  MATH CHINESE ENGLISH
where kaohao.id = MATH.id = CHINESE.id = ENGLISH.id 
order by chinese [asc | desc ],math [asc | desc ],english [asc | desc ]

 

0
卖鱼的风
卖鱼的风

select 
kh.id `考号`,
kh.school `学校`,
kh.student `学生`,
sum(if(s.title = '语文', cj.defen, 0)) `语文`,
sum(if(s.title = '数学', cj.defen, 0)) `数学`,
sum(if(s.title = '英语', cj.defen, 0)) `英语`
from kaohao kh
left join chengji cj on kh.id = cj.kaohao_id
left join subject s on cj.subject_id = s.id
group by kh.id

0
xl01
xl01

引用来自“卖鱼的风”的评论

select 
kh.id `考号`,
kh.school `学校`,
kh.student `学生`,
sum(if(s.title = '语文', cj.defen, 0)) `语文`,
sum(if(s.title = '数学', cj.defen, 0)) `数学`,
sum(if(s.title = '英语', cj.defen, 0)) `英语`
from kaohao kh
left join chengji cj on kh.id = cj.kaohao_id
left join subject s on cj.subject_id = s.id
group by kh.id

再加个排序就好了,排序值用变量代替。。

ORDER BY `数学` DESC

0
Joyzhou
Joyzhou

sql 行列转换

返回顶部
顶部