请各位多多指教!
   我现在有个表,表里有两个字段分别是:学号,成绩,其中学号是关键字段.学号和成绩都有相应的数据,例如学号为98771的成绩为590分,学号为98772的成绩为596分,学号为97771的成绩为589,这样的数据一共有N条.现在我想新增加一列用来写入相应的排名,这一列的数据是根据成绩字段里的成绩从高到低写入相应的排名,例如学号为98772的成绩为596分的排名为1,那么就在相应的排名列中写入1,学号为98771的成绩为590分,那么就在相应的排名列中写入2,学号为97771的成绩为589,那么就在相应的排名列中写入3......那些排名是自动录入的,而不是手工录入.只能在用MYSQL的语法写.

解决方案 »

  1.   

    这个简单,对成绩这张表做一个升序排列 order by scord desc
    然后依据这个顺序,更新排名
      

  2.   

    UPDATE 表 SET
      排名 = (select count(*) from 表 t2 where t2.成绩 > 表.成绩) + 1mysql 不懂,SQL 知道一些,或许可以。
      

  3.   

    这是全部录入后一次 UPDATE 所有排名。实际上每录入一条,排名都可能会有变化,因此该代码可能需要在每录入一条时都执行一下。更好的主意是不保存排名,在显示到用户界面时再计算排名。
      

  4.   

    我是先把全部成绩都录入进去,然后再UPDATE所有排名!但我不明白
    UPDATE 表 SET 排名 = (select count(*) from 表 t2 where t2.成绩 > 表.成绩) + 1
    这名!为什么要用到表 t2 ?
      

  5.   

    在一个 SQL 语句中,一个表多次使用,应该起别名,这表明将同一个表当做两个不同的表操作。另外问一下,这语句成吗?我手头没有很容易进行测试的表,所以我不知道会不会有问题。
      

  6.   

    我不知道在MYSQL能不能起别名,所以没有测试成绩!
      

  7.   

    我知道怎样起别名了.
    UPDATE 表 SET 排名 = (select count(*) from 表 t2 where t2.成绩 > 表.成绩) + 1这句的具体的意思是什么啊?
      

  8.   

    你这个问题是要求在新插记录的时候,同时要更新原来的记录,如果换有触发器的数据库就很简单,如果是插入以后,再去用另外的sql语句那就另当别论了
    不过我觉得你的问题是不是不增加一列解决不了问题啊
      

  9.   

    这句话是想从成绩表中,对每一行,查出成绩大于该行成绩的行数。比如说,如果某行是第一名,那么就不会有比该行成绩更高的行,这时 count(*) 为 0,然后 +1,就得到 1。
      

  10.   

    用循环啊
    int sum=0;
    int j=0;
    String sql="select count(*) from t1(表名)";
    ResultSet rs=db.executeQuery(sql);
    if(rs.next())
    {
      rs.next();
      sum=rs.getInt(1);
    }
    for(int i=0;i<sum;i++)
    {
      j=i+1; 
      db.executeUpdate("update t1(表名) set mici(名次字段)='"+j+"' order by grade(dn )
    }
      

  11.   

    用循环啊
    int sum=0;
    int j=0;
    String sql="select count(*) from t1(表名)";
    ResultSet rs=db.executeQuery(sql);
    if(rs.next())
    {
      rs.next();
      sum=rs.getInt(1);
    }
    for(int i=0;i<sum;i++)
    {
      j=i+1; 
      db.executeUpdate("update t1(表名) set mici(名次字段)='"+j+"' order by grade(成绩) desc limit "+i+",1");
    }
      

  12.   

    用sql的排序就行,mysql中是用标准sql的。
      

  13.   

    最好用触发器,听说最新版的mysql支持,以前版本的,单用sql语句不好实现,可以用程序辅助一下。
      

  14.   

    create table test (
      xh int,
      cj int,
      mc int
    )创建一个表。insert into test (xh, cj, mc) values (98771, 590, 0);
    insert into test (xh, cj, mc) values (98772, 596, 0);插入两条记录。update test set mc=(select count(*) from test t2 where t2.cj > test.cj) + 1;执行更新。这里的 test t2 就是为表 test 起了个别名 t2,用不着在别的什么地方通过什么别的方法起。楼主需要学习一下 SQL,几乎每一本数据库书籍上都会有介绍。
      

  15.   

    public void op(){
    int sum=0;
    int num = 0;
    String sql="select count(*) from grade";
    try{
    stat = conn.prepareStatement(sql);
    results = stat.executeQuery();
    if(results.next()){
      sum=results.getInt(1);
    }

    for(int i=sum;i>0;i--){
       stat.executeUpdate("update grade set num='"+i+"' order by result desc limit "+i+";");
    }
    }catch (Exception e){
    e.getMessage();
    }

    }