有表chenji
   name          fenshu
   zhang           50
   wang            55
   li              55
   chen            60
   xie             20
用一条SQL语句查询,结果如下】
    姓名        分数       名次
    chen       60         1
    wang       55         2
    li         55         2
    zhang      50         3
    xie        20         4
请各位大侠指点一下

解决方案 »

  1.   

    select t.name as 姓名, t. fenshu as 分数,rownum as 排名 from t_table t order by t. fenshu;
      

  2.   


    SELECT 姓名,分数
    RANK () OVER (ORDER BY 分数 DESC) 排名
    FROM 成绩表db2,oracle应该支持,小数据库就不一定了
      

  3.   

    我只写oracle语法:select c.name 姓名,c.fenshu 分数,rownum 名次
    from chenji
    order by c.fenshu desc;
      

  4.   

    补充
    select t.staff_name  as 姓名, rownum as 排名 from t_staff_info t order by t.staff_roleid desc;
    少了个desc(降)
    asc(升)
      

  5.   

    改正:select c.name 姓名,c.fenshu 分数,rownum 名次
    from chenji c
    order by c.fenshu desc;贴到pl/sql中可直接运行。
      

  6.   

    楼上说的都对,但都适用于大型数据库。类似SQL, MYSQL 就要通过程序来排名。如果有需要我可以给出代码。
      

  7.   

    select t.name as 姓名, t. fenshu as 分数,rownum as 排名 from (select * from t_table  order by fenshu desc) t ;
      

  8.   

    MYSQL在查询上时无法达到LZ要求的。给点思路你吧:
    降序查询出数据封装List里,Iterator时分别取出分数用count计数,
    判断下一条与上一条是否相等,不等+1,相等=赋值。
    排名字段在数据库不存在,自定再MODEL里定义。
      

  9.   

    SELECT 
    b.name AS 姓名,
    b.fenshu AS 分数,
    (SELECT count(*)+1 AS dd FROM chenji AS a WHERE a.fenshu>b.fenshu) AS 名次
    FROM chenji AS b 
    ORDER BY b.fenshu DESC 
    mysql的,效率可能不是很高!
      

  10.   


    LZ要的是12234
    LS的加点东西就行了。
    如果LZ无视效率的话。
    在代码里排名不是挺好吗,为什么非要在sql语句里排呢。SELECT (SELECT count(*)+1 FROM (select DISTINCT fenshu from chenji) a where a.fenshu>b.fenshu) AS 排名,b.fenshu,b.name FROM chenji as b order by b.fenshu desc