{eval=Array;=+count(Array);}
SQL中的排序要使用關鍵字order by,后面跟上指定的排序列名稱即可。排序類型分升序和降序,升序為ASC,這也是默認的類型;降序為DESC。指定的排序列可以有多個,多個列之間用半角逗號隔開。這就是基本的排序語法。
但是,看起來非常簡單的排序,其實里面也大有學問,以下幾點特別提醒注意:
當在select子句中用到top謂詞時,一般都是和order by一起配合使用,這是因為:只有對排序以后的數據提取前N行的值時才有意義。而當top和order by組合使用時,又會出現一種特殊的情況:如果指定范圍內的最后一條記錄有多個相同值,那么這些值對應的記錄也會被返回,也就是說,最后返回的記錄數可能會大于指定的數量。
如下圖,盡管指定的數量是4個,但最終的返回記錄數卻是5。原因就在于,用于排序的列“產品id”的最后一行有相同的兩個值:
如果在上述語句中不使用order by,則返回的記錄數正常是4條。
以上情況在MySQL數據庫中就不會出現,因為它不支持Top的寫法,它使用的是limit,因此還要注意不同數據庫中的差別。
例如,要對訂單表中的產品按照數量合計倒序排序,可以這樣寫:
盡管select子句中不需要生成數量的合計列,但也必須使用group by。只有這樣,order by中才能使用聚合函數。當然,如果在select中加上sum(數量),輸出的排序結果會更直觀一些:
select中的聚合函數和排序中的聚合函數未必相同,例如下面的語句,產品名稱雖然是按數量合計數排序,但輸出的卻是單價中的最高值:
我是人民郵電出版社簽約作者,期待您的關注,歡迎留言和我交流,謝謝!
前面查詢就不寫了,不同的數據庫有略微差別。排序用關鍵字 order by來表示,后面跟要進行排序的字段名或鍵值,其后用asc表示升序,desc表示倒序。可以有多個排序字段,用逗號分隔。完整的例子: select field1,field2,field3 from sometable order by field1 asc,field2 desc
0
回答0
回答0
回答0
回答0
回答0
回答1
回答0
回答0
回答0
回答