当前位置: 代码迷 >> SQL >> 一道sql的题目,本人水平有限,求高人相助。该怎么处理
  详细解决方案

一道sql的题目,本人水平有限,求高人相助。该怎么处理

热度:235   发布时间:2016-05-05 15:30:50.0
一道sql的题目,本人水平有限,求高人相助。
本人用的是数据库是Mysql
有以下三个表:
create table 学生(
  学号 varchar(255),
  姓名 varchar(255),
  班级名 varchar(255));

create table 课程(
  课程号 varchar(255),
  课程名 varchar(255));

create table 成绩(
  学号 varchar(255),
  课程号 varchar(255),
  分数 int);
问题:
把班级'班(3)'的学生成绩按以下格式显示
----- ----- ----- -----
姓名 |数学 |语言 |物理



------解决方案--------------------
SQL code
selecta.学号,sum(b.数学成绩'),sum(b.语文成绩'),sum(b.物理成绩'),from 学生 aleft join(select成绩.学号(CASE WHEN 成绩.课程号 = '数学CODE' THEN 成绩.分数 ELSE 0 END) AS '数学成绩',(CASE WHEN 成绩.课程号 = '语文CODE' THEN 成绩.分数 ELSE 0 END) AS '语文成绩',(CASE WHEN 成绩.课程号 = '物理CODE' THEN 成绩.分数 ELSE 0 END) AS '物理成绩'FROM 成绩LEFT JOIN课程ON成绩.课程号=课程.课程号) bon a.学号 = b.学号group by a.学号
------解决方案--------------------
SQL code
select s.姓名,    sum(CASE WHEN sc.课程号 = '数学' THEN sc.分数 ELSE 0 END) as 数学,    sum(CASE WHEN sc.课程号 = '语言' THEN sc.分数 ELSE 0 END) as 语言,    sum(CASE WHEN sc.课程号 = '物理' THEN sc.分数 ELSE 0 END) as 物理from (学生 s inner join 成绩 sc on s.学号=sc.学号)    inner join 课程 c on sc.课程号=c.课程号where s.班级名='班(3)'group by s.姓名
  相关解决方案