Sqlserver 常用Sql语句
分页(两次查询)
-- 查询总计数量 SELECT COUNT(*) AS TotalCount FROM YourTable WHERE conditions; -- 分页查询 SELECT YourColumns FROM YourTable WHERE conditions ORDER BY YourOrderingColumns OFFSET @PageSize * (@PageNumber - 1) ROWS FETCH NEXT @PageSize ROWS ONLY;
窗口函数实现分页
常见的窗口函数包括 ROW_NUMBER()
, RANK()
, DENSE_RANK()
, NTILE()
, LAG()
, LEAD()
等等。
1 SELECT *, 2 COUNT(*) OVER () AS TotalCount 3 FROM YourTable 4 WHERE conditions 5 ORDER BY YourOrderingColumns 6 OFFSET @PageSize * (@PageNumber - 1) ROWS 7 FETCH NEXT @PageSize ROWS ONLY;
-
ROW_NUMBER()
: 为结果集中的每一行分配一个唯一的整数值,按照指定的排序顺序进行分配。如果有相同的排序值,则每行都会被分配一个不同的行号。SELECT ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber, FirstName, LastName, Salary FROM Employees;
-
RANK()
: 为结果集中的每一行分配一个排名,如果有相同的排序值,则会跳过相同的排名,下一个排名会增加相应数量的行数SELECT RANK() OVER (ORDER BY Salary DESC) AS Rank, FirstName, LastName, Salary FROM Employees;
-
DENSE_RANK()
: 为结果集中的每一行分配一个密集排名,相同的排序值会得到相同的排名,但是排名不会跳过。SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank, FirstName, LastName, Salary FROM Employees;
-
NTILE()
: 将结果集划分为指定数量的桶(buckets),并为每个桶中的行分配一个标识号。通常用于等分数据集。SELECT NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile, FirstName, LastName, Salary FROM Employees;
-
LAG()
: 用于访问前一行的数据。SELECT FirstName, LastName, Salary, LAG(Salary, 1) OVER (ORDER BY Salary) AS PreviousSalary FROM Employees;
-
LEAD()
: 用于访问后一行的数据。SELECT FirstName, LastName, Salary, LEAD(Salary, 1) OVER (ORDER BY Salary) AS NextSalary FROM Employees;
标签:
SqlServer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?