取出一个成绩表中每科成绩最好的前两名(自联接和with as)
表结构如下:
1 CREATE TABLE [dbo].[stuScore]( 2 [Id] [int] IDENTITY(1,1) NOT NULL, 3 [stuId] [int] NOT NULL, 4 [stuName] [nvarchar](255) NOT NULL, 5 [subject] [nvarchar](255) NOT NULL, 6 [score] [int] NOT NULL 7 ) ON [PRIMARY]
三种方法:
1.
1 select * from stuScore A where A.stuId in 2 (select top 2 stuId from stuScore B where A.subject=B.subject order by B.score desc) 3 order by A.score desc
2.
1 select * from stuScore A where 2 (select COUNT(*) from stuScore B where A.subject = B.subject and B.score>=A.score)<=2 3 order by A.score desc
这两种方法查询结果不会按照科目分组:
3.利用with as
1 with cte as 2 ( 3 select *,rn=row_number() over(partition by subject order by score desc ) 4 from stuScore 5 ) 6 select Id,stuId,stuName,subject,score from cte where rn<=2
结果如下:
人生没有回头路,珍惜当下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)