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 @ 2024-03-06 14:57  看一百次夜空里的深蓝  阅读(68)  评论(0)    收藏  举报