表1
姓名   年龄  分数
张三    12   50
李四    10   90
王五    15   10
张平    10   70以分数排序
结果要求每次显示二条
-------------------------------第一次显示
姓名   年龄  分数
李四    10   90
张平    10   70
---------------
第二页显示
姓名   年龄  分数
张三    12   50
王五    15   10
但我的得到的结果是:
-------------------
第一次显示
姓名   年龄  分数
张三    12   50
李四    10   90第二页显示
姓名   年龄  分数
王五    15   10
张平    10   70请问要怎样才能得到我要的结果

解决方案 »

  1.   

    试试order by 分数,rowId
      

  2.   

    我想lz的分页用的就是rownum的方法,只是子查询的order by 有问题!!order by 一定要order by unique的column,没有的话,就加个rowid字段SELECT * FROM (select row_.*, rownum start_rownum_ from (
    --符合需要的子查询
    ) row_ WHERE rownum <= ?  )  WHERE start_rownum_ >= ?
      

  3.   

    SELECT * FROM (SELECT NAME, AGE, SCORE FROM TABLE1 ORDER BY SCORE DESC) WHERE ROWNUM <3
      

  4.   

    select t.姓名,年龄,分数
    from ( select row_num() over(order by 分数 desc) rn, 姓名, 年龄, 分数
               from 表1 ) t
    where  t.rn > (&页码 - 1) * &每页行数
    and t.rn <= &页码 * &每页行数
      

  5.   

    错了,是
    select t.姓名,年龄,分数
    from ( select row_number() over(order by 分数 desc) rn, 姓名, 年龄, 分数
               from 表1 ) t
    where  t.rn > (&页码 - 1) * &每页行数
    and t.rn <= &页码 * &每页行数
      

  6.   

    根据回贴和自己实验如下:
    select t.姓名,t.年龄,t.分数 from (select rownum as NewRownum,姓名,年龄,分数 from 
    表1order by 分数 desc) t where t.NewRownum>1 and t.NewRownum<1+2,但我觉得还是不够好,因为如果数据量太大时,每次查询都要整个表查一次,太慢了,如果有索引会快好多,但数据量大到上亿条时,这语句就没法执行了,因为我公司的数据量就会大于1亿条.请问各位大侠有没有更好的办法.
      

  7.   

    采用我的方法可以不必每次都全表扫描,但是效率会随着页数的增加而降低SELECT * FROM (select row_.*, rownum start_rownum_ from (
    select 姓名,年龄,分数 from 表1 order by 分数,rowId desc
    ) row_ WHERE rownum <= ?  )  WHERE start_rownum_ >= ?
    但是上亿条,光一个order by 就完蛋了吧~~