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