最近回忆起以前的一道面试题,是关于学生成绩查询的,应该比较经典,特此贴出来供大家学习。
条件:三张表,学生表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