需求:查询一次考试的成绩(一次考试有多个课程)并计算单科和总分班级排名,年级排名表结构入下
考试信息表 简称表a
examid(考试id主键),gradeid(年级id),classid(班级id),schoolid(学校id)
100 020 0200 02
考试课程表 简称表b
examid(考试id外键) courseid(考试课程id 主键) code(考试课程代码)
课程代码表 简称表c
code(考试课程代码) name(课程名字)
单科成绩表 简称表d
courseid(考试课程id) point(分数) studentid(学号), studentname(姓名) 主键为courseid+studentid
成绩总表 简称表e
classid(班级id主键)
examid(考试id), point(分数) studentid(学号), studentname(姓名) 主键为examid+studentid
班级信息表 f
classid(班级id),schoolid(学校id),classname(班级名字) 主键classid
学生信息表 g
studentid(学生id),studentname(学生姓名),classid(班级id),schoolid(学校id)主键stidentid
在页面上显示的图形为
班级 姓名 化学(科目) 物理 总分
高一(1) a 100 1 1 80 10 17 180 5 9
...........
...........
其中化学下面的第一个1为班级排名第二个1为年级排名。
我的思路是通过考试id查询出考试科目。然后通过union 单科成绩表 和 成绩总表
这个sql语句该怎么写呢?3ks
考试信息表 简称表a
examid(考试id主键),gradeid(年级id),classid(班级id),schoolid(学校id)
100 020 0200 02
考试课程表 简称表b
examid(考试id外键) courseid(考试课程id 主键) code(考试课程代码)
课程代码表 简称表c
code(考试课程代码) name(课程名字)
单科成绩表 简称表d
courseid(考试课程id) point(分数) studentid(学号), studentname(姓名) 主键为courseid+studentid
成绩总表 简称表e
classid(班级id主键)
examid(考试id), point(分数) studentid(学号), studentname(姓名) 主键为examid+studentid
班级信息表 f
classid(班级id),schoolid(学校id),classname(班级名字) 主键classid
学生信息表 g
studentid(学生id),studentname(学生姓名),classid(班级id),schoolid(学校id)主键stidentid
在页面上显示的图形为
班级 姓名 化学(科目) 物理 总分
高一(1) a 100 1 1 80 10 17 180 5 9
...........
...........
其中化学下面的第一个1为班级排名第二个1为年级排名。
我的思路是通过考试id查询出考试科目。然后通过union 单科成绩表 和 成绩总表
这个sql语句该怎么写呢?3ks
解决方案 »
- oracle建立ODBC时老出现“试图执行系统不支持的操作”的问题
- 问一个低级的sql调优问题
- oracle 输出问题!
- spfile创建方式不一样,会影响使用吗?
- ora-03127: 在活动操作结束之前不允许进行新的操作 问题
- 求写一存贮过程
- 请问在SQL Plus环境里可以让用户进行输入的一个语句是什么?
- oracle有没有sqlserver中的uniqueidentifier字段
- 用什么方法可以查到表空间(如USERDATA)上有哪些表?
- 当我选“登陆到ORACLE MANAGER SERVER”后,输入正确的用户名和密码后,总提示请验证已输入ORACLE MANAGERMENT SERVER的正确主机名和状态
- 存储过程中的小问题,大虾帮个忙
- 我想根据一个表里的某个字段的值分别统计(按日期统计)出来的结果在同一个结果集中显示,请问如何做?
先取班级姓名,再关联成绩,再把成绩相加就ok
BTW:你这个数据库设计很规范,典型的按照第三范式设计,但是排名作为一个很重要的信息应该作为一个字段的。这样你用procudure就搞定了。