select max(ssd_id) from (select top  3  ssd_id from salary_standard  order by ssd_id) as t
加上order by 和不加order by 为什么会不一样 order by有什么用

解决方案 »

  1.   

    order by排序后取前三个 和不排序取前三个 结果肯定不一样 order by 默认 ssd_id asc排序
      

  2.   

    先执行ORDER BY,然后执行TOP如果想反着来就把ORDER BY 写外边
      

  3.   

    是先把你要的数据order by一下后,
    然后在取出前三条,你可以单独写条sql语句测试一下就知道了
      

  4.   

    order by 是对你要查询的字段进行排序!
    默认是降升序排列!
    用法:
    order by 字段名 desc  --降序
    order by 字段名 asc  --升序
    也可以同时对两个字段排序
    order by 字段名 desc,字段名 desc
    同时两个字段排列,前一个字段排列出现相等的情况再排第二个字段
      

  5.   

    不加order by,語句select top 3 ssd_id from salary_standard 是隨機取出數據庫中的3條數據,每次都不一樣,這個是SQL2005內幕裡面這樣描述的。有興趣的可以去做個測試。
    也就是說,取出來的3條數據每次不一樣,自然最後MAX後的數據也不一樣。
    order by 的目的很顯然,就是針對這個情況而做的排序,讓數據記錄準確的查詢出來。
      

  6.   

    補充一下,SQL中表的存放並不是我們想像中那樣會排列好或者按順序放置的,這就涉及到SQL的內幕知識。本人也只是略懂而已,可能有描述不對的地方還請參考Inside T SQL2005 QUERYING 這本書
      

  7.   

    order by 就是将查询出来的结果进行排序。默认是的是顺序排序。如果在排序字段后加上desc则是倒序排序了。一般的用top选取相应记录时,都会用到order by。
      

  8.   

    top N
    如果不加order by 结果随机产生。
      

  9.   

    紅色標識的“隨機”有些錯誤。SQL訪問數據有他自己的訪問方式。以下將引用一下原文:如果指定了不唯一的ORDER BY 列表且未指定WITH TIES 選項,或是根本沒有指定ORDER BY 子句,帶有TOP 的查詢將是不確定的。也就是說,返回的行正好是SQL Server物理上最先訪問到的行,因此它可能會產生不同的結果,但都被認為是正確的。如果你想保證確定性,TOP查詢必須包含唯一的ORDER BY 列表或WITH TIES選項。此段將回答LZ的問題,也將解釋我敘述時的錯誤。