MYSQL如何给学生总成绩排名呢
我有张表记录学生成绩的
ID  考试代号  科目编号 学生号  班级号 成绩
1 1 1 1 12 12
3 1 2 1 12 11
4 1 3 1 12 10
5 1 1 2 12 12
6 1 2 2 12 21
7 1 3 2 12 23 如何创建视图或者使用查询语句得出考生号     科目1    科目2     科目3    总成绩    名次 
1      12       11 10  33    2
2      12       21 23  56        1希望各位前辈给予支持,

解决方案 »

  1.   

    大致想了一下,不知道你会不会采纳建第一个视图名为shitu1
    select stuid ,sum(score) as allscore from 你给出的表名 group by stuid order by allscore在第一个视图的基础上建第二个临时表select distinct t1.stuid,t2.allscore sort = identity(int,1,1) into 临时表名 from  你给出的表名 t1 ,shitu1 t2where t1.stuid=t2.stuidorder by t2.allscore desc还要第三个视图select stuid ,score as score1, score as score2,score as score3 from 你给出的表名 t1 where 
    score1 in(t1.科目id =1)
    score2 in(t1.科目id =2)
    score3 in(t1.科目id =3)
    然后临时表二 和 视图三 根据stuid链接下  就好了大概这样  
      

  2.   

    你的考试科目数量是固定的吗?如果是的话 那就sql语句就能解决
    否则的话 你就要使用存储过程 或者通过两次查询  然后在程序中去处理
      

  3.   

    谢谢楼上各位的支持,但是我还是没太明白,我再把问题叙述一下,考试的科目不是固定的,基础表是
    exam考试表
    +-----------+--------------+------+-----+---------+----------------+
    | Field     | Type         | Null | Key | Default | Extra          |
    +-----------+--------------+------+-----+---------+----------------+
    | exam_Id   | int(10)      | NO   | PRI | NULL    | auto_increment |
    | exam_name | varchar(100) | YES  |     | NULL    |                |
    | begintime | datetime     | YES  |     | NULL    |                |
    | endtime   | datetime     | YES  |     | NULL    |                |
    | term      | varchar(100) | YES  |     | NULL    |                |
    | termId    | int(10)      | YES  |     | NULL    |                |
    | gradeId   | int(10)      | YES  |     | NULL    |                |
    | grade     | varchar(100) | YES  |     | NULL    |                |
    | other3    | varchar(500) | YES  |     | NULL    |                |
    | other4    | text         | YES  |     | NULL    |                |
    +-----------+--------------+------+-----+---------+----------------+exam_score;成绩表
    +-----------+--------------+------+-----+---------+----------------+
    | Field     | Type         | Null | Key | Default | Extra          |
    +-----------+--------------+------+-----+---------+----------------+
    | score_id  | int(10)      | NO   | PRI | NULL    | auto_increment |
    | exm_id    | int(10)      | NO   | PRI | 0       |                |
    | sub_id    | int(10)      | NO   | PRI | NULL    |                |
    | studentId | int(10)      | NO   | PRI | 0       |                |
    | classId   | int(10)      | YES  | MUL | NULL    |                |
    | score     | double(5,2)  | YES  |     | NULL    |                |
    | termid    | int(10)      | YES  |     | NULL    |                |
    | re    | varchar(100) | YES  |     | NULL    |                |
    +-----------+--------------+------+-----+---------+----------------+ exam_subject;考试科目表
    +-------------+---------------+------+-----+---------+----------------+
    | Field       | Type          | Null | Key | Default | Extra          |
    +-------------+---------------+------+-----+---------+----------------+
    | sub_id      | int(10)       | NO   | PRI | NULL    | auto_increment |
    | exam_Id     | int(10)       | YES  | MUL | NULL    |                |
    | subjectname | varchar(100)  | YES  |     | NULL    |                |
    | subjectId   | int(10)       | YES  |     | NULL    |                |
    | full    | double(100,2) | YES  |     | NULL    |                |
    | times       | varchar(100)  | YES  |     | NULL    |                |
    | begintime   | varchar(300)  | YES  |     | NULL    |                |
    | endtime     | varchar(300)  | YES  |     | NULL    |                |
    | other1      | int(10)       | YES  |     | NULL    |                |
    | other2      | int(10)       | YES  |     | NULL    |                |
    | other3      | varchar(500)  | YES  |     | NULL    |                |
    | other4      | text          | YES  |     | NULL    |                |
    | pass_score  | double(5,0)   | YES  |     | NULL    |                |
    | good_score  | double(5,0)   | YES  |     | NULL    |                |
    | proportion  | double(3,0)   | YES  |     | NULL    |                |
    +-------------+---------------+------+-----+---------+----------------+student_avg_score 学生平均成绩视图
    +-------------+--------------+------+-----+---------+-------+
    | Field       | Type         | Null | Key | Default | Extra |
    +-------------+--------------+------+-----+---------+-------+
    | classId     | int(10)      | YES  |     | NULL    |       |
    | Avgscore    | double(9,6)  | YES  |     | NULL    |       |
    | studentId   | int(10)      | NO   |     | 0       |       |
    | StudentName | varchar(100) | YES  |     | NULL    |       |
    | exam_name   | varchar(100) | YES  |     | NULL    |       |
    | classname   | varchar(100) | YES  |     | NULL    |       |
    | exm_id      | int(10)      | NO   |     | 0       |       |
    | studentNO   | int(10)      | YES  |     | NULL    |       |
    | gradeId     | int(10)      | NO   |     | 0       |       |
    | gradeName   | varchar(255) | YES  |     | NULL    |       |
    +-------------+--------------+------+-----+---------+-------+
    要得到某次考试中某个学生的平均成绩的班级排名和年级排名
    classId是班级编号
    gradeId是年级编号
    其中在student_avg_score这个视图中已经得到了这个学生的平均成绩及年级班级的相关信息
    如何实现得到某次考试中某个学生的平均成绩的班级排名和年级排名
      

  4.   

    推荐LZ看下http://blog.csdn.net/redwood_lin/archive/2007/04/03/1550606.aspx
      

  5.   

    select count(成绩) as 排名 from 学生成绩 where 学号=学生表(学号) order by 排名---- 在加个学生表啊。