今天本來是測試一段代碼,然后用到Distinct關鍵字,查看執行計划之后,突然發現過程中有對表進行sort! 上網搜索和加之驗證得出如下結果:
結論:
1.使用distinct 關鍵字后會對distinct后面用到的關鍵字進行默認的升序排序.
2.可以使用order by 來改變排序規則.
3.使用distinct后,出現在order by 中的字段必須要寫在 SELECT 句中,非充要條件。
求問各大神:如何消除distinct自動排序,及為什么要進行排序,還有distinct是如何做到消除重復列的!
另:
//Wrong SQL SELECT DISTINCT field_1,field_2 FROM Table ORDER BY field_0 //Reason ORDER BY 子句與 (OrderIndex) DISTINCT 沖突 //Solve Method SELECT field_1,field_2 FROM Table GROUP BY field_1,field_2 ORDER BY Min(field_0)
Group by 語句好像也要自動進行排序,求真相???
測試數據如下:
1 CREATE TABLE Student (id int identity(0,1), name nvarchar(20) ,course nvarchar(20) , score int) 2 DROP TABLE Student 3 insert into Student values 4 ('張三','語文',81), 5 ('張三','數學',75), 6 ('李四','語文',76), 7 ('李四','數學',90), 8 ('王五','語文',81), 9 ('王五','數學',100), 10 ('王五','英語',90)
執行 SQL : SELECT distinct S.name ,S.score FROM Student S ;
查看執行計划結果如下:
可以看到在sort階段,分別對name和score兩個字段進行升序排序!
執行 SQL : SELECT distinct S.name ,S.score FROM Student S ;
查看執行計划結果如下:
對score 和name 分別 降序和升序排序!
執行 SQL :SELECT distinct S.name ,S.score FROM Student S order by S.score desc ,S.course;
查看執行計划結果如下:
解析成功,但執行錯誤!