简单的 学生 各科 成绩 展示 sql

最近回忆起以前的一道面试题,是关于学生成绩查询的,应该比较经典,特此贴出来供大家学习。

条件:三张表,学生表student,科目表course,成绩表results

表结构

学生表

-- Create table
create table STUDENT
(
  sid  VARCHAR2(10) not null,
  name VARCHAR2(10),
  sex  VARCHAR2(2),
  age  NUMBER(2)
)

科目表

create table COURSE
(
  c_id   VARCHAR2(10) not null,
  c_name VARCHAR2(20) not null
)
成绩表

-- Create table
create table RESULTS
(
  r_id  VARCHAR2(10) not null,
  s_id  VARCHAR2(10) not null,
  c_id  VARCHAR2(10) not null,
  score NUMBER(3) default 0
)

要求显示效果

sql语句:

SELECT s.sid,s.name,
SUM(CASE c.c_name WHEN '语文' THEN r.score END )  AS "语文",
SUM(CASE c.c_name WHEN '数学' THEN r.score END )  AS "数学",
SUM(CASE c.c_name WHEN '英语' THEN r.score END )  AS "英语"
 FROM student s,course c,results r WHERE s.sid = r.s_id AND c.c_id = r.c_id GROUP BY s.sid,s.name


在附送一个:

同时查出 语文分数>85分 以上的男生人数和女生人数


SELECT 
sum(CASE s.sex WHEN '男' THEN COUNT(s.sex) END ) AS "男生数量",
sum(CASE s.sex WHEN '女' THEN COUNT(s.sex) END ) AS "女生数量"
 FROM  student s,course c,results r WHERE s.sid = r.s_id AND c.c_id = r.c_id AND c.c_name='语文' AND r.score > 85 
 GROUP BY c.c_name,s.sex

当然 我知道还有比我这个更简练的方法,如果有请回帖告诉我,谢谢。大家共同进步。

你可能感兴趣的:(sql,DB)