今天本来是测试一段代码,然后用到Distinct关键字,查看执行计划之后,突然发现过程中有对表进行sort! 上网搜索和加之验证得出如下结果:

结论:

1.使用distinct 关键字后会对distinct后面用到的关键字进行默认的升序排序.

2.可以使用order by 来改变排序规则.

3.使用distinct后,出现在order by 中的字段必须要写在 SELECT 句中,非充要条件。

求问各大神:如何消除distinct自动排序,及为什么要进行排序,还有distinct是如何做到消除重复列的!

另:

//Wrong SQLSELECT DISTINCT field_1,field_2 FROM Table ORDER BYfield_0//ReasonORDER BY 子句与 (OrderIndex) DISTINCT冲突//Solve MethodSELECT 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 TABLEStudent3 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 ;

查看执行计划结果如下:

4eb18acef9c15b260761e49dfda6d695.png

可以看到在sort阶段,分别对name和score两个字段进行升序排序!

执行  SQL : SELECT   distinct S.name ,S.score FROM Student S ;

查看执行计划结果如下:

0c177b26b667aca43f1182297006a09d.png

对score 和name 分别 降序和升序排序!

执行  SQL :SELECT   distinct S.name ,S.score FROM Student S order by S.score desc ,S.course;

查看执行计划结果如下:

66d80dc9443c3feee744981d8d9fca10.png

解析成功,但执行错误!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐