SQL 基础 :Distinct 和 order by 关系。(Distinct 自动排序)
今天本来是测试一段代码,然后用到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;
查看执行计划结果如下:
解析成功,但执行错误!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?