【工作笔记0034】Sqlserver开窗函数Over()实现翻页并带出总条数

1.Over() 定义理解

Over()开窗函数指定一组行,开窗函数计算从窗口函数输出的结果集中各行的值。

简单来说就是,Over() 不需要 Group By 即可实现分组统计,因为Over 里面的参数就可以实现分组

2.可选参数

over([partition by ] <order by >)

[partition by ]:即以什么字段为唯一键去分组,可以多个字段组成键

<order by >:即分组后以什么字段去排序

3.常用举例

开窗函数 Over() 通常结合 ROW_NUMBER() 、Count() 函数可以实现数据库的翻页查询,并且返回总条数。

这里新建一张测试表,插入20条数据,每个字段都是整型,数据如下:

假设,现在想要翻页查询表数据,且按aa 倒序、bb升序、cc倒序的排列,去获取第二页数据,每页10条数据,那么sql语句如下:

SELECT TOP 10 *  FROM (
	SELECT *,ROW_NUMBER() OVER (ORDER BY aa DESC,bb ASC,cc DESC) Rank,COUNT(1) OVER() AS TotalItem FROM test WITH(nolock)
) t
WHERE Rank > (2 - 1) * 10 -- 这里是公式(pageIndex-1)*pageSize
ORDER BY Rank

注意:

ROW_NUMBER() OVER (ORDER BY aa DESC,bb ASC,cc DESC) Rank

这句话是为了给数据结果集编号,且排序

COUNT(1) OVER() AS TotalItem

这句话是为了直接求出结果集总条数,而用于后台逻辑去计算总页数并返回前端

上述sql的查询结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值