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;
  1. ROW_NUMBER(): 为结果集中的每一行分配一个唯一的整数值,按照指定的排序顺序进行分配。如果有相同的排序值,则每行都会被分配一个不同的行号。

    SELECT ROW_NUMBER() OVER (ORDER BY Salary DESC) AS RowNumber, FirstName, LastName, Salary FROM Employees;
  2. RANK(): 为结果集中的每一行分配一个排名,如果有相同的排序值,则会跳过相同的排名,下一个排名会增加相应数量的行数

    SELECT RANK() OVER (ORDER BY Salary DESC) AS Rank, FirstName, LastName, Salary FROM Employees;
  3. DENSE_RANK(): 为结果集中的每一行分配一个密集排名,相同的排序值会得到相同的排名,但是排名不会跳过。

    SELECT DENSE_RANK() OVER (ORDER BY Salary DESC) AS DenseRank, FirstName, LastName, Salary FROM Employees;
  4. NTILE(): 将结果集划分为指定数量的桶(buckets),并为每个桶中的行分配一个标识号。通常用于等分数据集。

    SELECT NTILE(4) OVER (ORDER BY Salary DESC) AS Quartile, FirstName, LastName, Salary FROM Employees;
  5. LAG(): 用于访问前一行的数据。

    SELECT FirstName, LastName, Salary, LAG(Salary, 1) OVER (ORDER BY Salary) AS PreviousSalary FROM Employees;
  6. LEAD(): 用于访问后一行的数据。

    SELECT FirstName, LastName, Salary, LEAD(Salary, 1) OVER (ORDER BY Salary) AS NextSalary FROM Employees;

 

posted @   看一百次夜空里的深蓝  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示