oracle中   order by 字段A,对于字段A的值相同的几条数据,是怎么排序的?

解决方案 »

  1.   

    排序方式有很多 一般默认的是BINARY   貌似是按拼音排序吧
      

  2.   

    查询排序方式 有很多种 具体的含义可以搜索下..select parameter,value,isdeprecated
    from V$NLS_VALID_VALUES 
    where parameter='SORT';    parameter  value  isdeprecated
    1 SORT BINARY FALSE
    2 SORT WEST_EUROPEAN FALSE
    3 SORT XWEST_EUROPEAN FALSE
    4 SORT GERMAN FALSE
    5 SORT XGERMAN FALSE
    6 SORT DANISH FALSE
    7 SORT XDANISH FALSE
    8 SORT SPANISH FALSE
    9 SORT XSPANISH FALSE
    10 SORT GERMAN_DIN FALSE
    11 SORT XGERMAN_DIN FALSE
    12 SORT FINNISH FALSE
    ......
      

  3.   

    我看了看自己的ORACLE排序,貌似看不出什么顺序,但是重复查询还是那个顺序,ORACLE是有一定的排序方式存在的。
      

  4.   

    我觉得是根据rowid进行的排序!
      

  5.   

    我在其他数据库中观察到的,是按主键排序的。oracle没注意过。
      

  6.   

    想限制排序方式可以用分析函数
    求出各科前3名
    SELECT STUDENT_ID,NAME,COURSE,SCORE,RANK
    FROM (SELECT STUDENT_ID,NAME,COURSE,SCORE,
    ROW_NUMBER() OVER (PARTITION BY COURSE
    ORDER BY SCORE DESC NULLS LAST) RANK
    FROM SCORE)
    WHERE RANK <= 3;
    STUDENT_ID NAME COURSE SCORE RANK
    ---------- -------- ------ ---------- -----
    2 喜羊羊 数学 100 1
    3 机器猫 数学 80 2
    4 蓝精灵 数学 80 3
    1 灰太狼 语文 5 1
    Oracle分析函数 朱元中
    2013-01-17 page 21
    ROW_NUMBER()
    SELECT STUDENT_ID,NAME,COURSE,SCORE,
    DENSE_RANK() OVER (PARTITION BY COURSE
    ORDER BY SCORE DESC NULLS LAST) RANK
    FROM SCORE;
    STUDENT_ID NAME COURSE SCORE RANK
    ---------- -------- ------ ---------- -----
    2 喜羊羊 数学 100 1
    3 机器猫 数学 80 2
    4 蓝精灵 数学 80 2
    5 Darwin 数学 50 3
    1 灰太狼 数学 4
    1 灰太狼 语文 5 1
    SELECT STUDENT_ID,NAME,COURSE,SCORE,RANK
    FROM (SELECT STUDENT_ID,NAME,COURSE,SCORE,
    DENSE_RANK() OVER (PARTITION BY COURSE
    ORDER BY SCORE DESC NULLS LAST) RANK
    FROM SCORE)
    WHERE RANK <= 3;
    STUDENT_ID NAME COURSE SCORE RANK
    ---------- -------- ------ ---------- -----
    2 喜羊羊 数学 100 1
    3 机器猫 数学 80 2
    4 蓝精灵 数学 80 2
    5 Darwin 数学 50 3
    1 灰太狼 语文 5 1
    SELECT STUDENT_ID,NAME,COURSE,SCORE,
    RANK() OVER (PARTITION BY COURSE
    ORDER BY SCORE DESC NULLS LAST) RANK
    FROM SCORE;
    STUDENT_ID NAME COURSE SCORE RANK
    ---------- -------- ------ ---------- -----
    2 喜羊羊 数学 100 1
    3 机器猫 数学 80 2
    4 蓝精灵 数学 80 2
    5 Darwin 数学 50 4
    1 灰太狼 数学 5
    1 灰太狼 语文 5 1
    SELECT STUDENT_ID,NAME,COURSE,SCORE,RANK
    FROM (SELECT STUDENT_ID,NAME,COURSE,SCORE,
    RANK() OVER (PARTITION BY COURSE
    ORDER BY SCORE DESC NULLS LAST) RANK
    FROM SCORE)
    WHERE RANK <= 3;
    STUDENT_ID NAME COURSE SCORE RANK
    ---------- -------- ------ ---------- -----
    2 喜羊羊 数学 100 1
    3 机器猫 数学 80 2
    4 蓝精灵 数学 80 2
    1 灰太狼 语文 5 1
      

  7.   

    我验证了下,是按rowid排序的,但是我以前验证的时候,记得不是按rowid排序的,难道是我的plsqldev出现了问题?就这样吧,结贴了。