• 【小5聊】sql server 分页和分组-row_number()和over()、rank()和over()的小区别


    在使用sql server数据库时,分页方式之一会常用到row_number结合over进行重新排序分页

    如果需要根据班级分组,分别显示对应班级的排名,rank就是很好的函数

    1、row_number()函数

    1)为每个分组生成唯一序号,相同值,序号不对,可用于分页

    2)函数“ROW_NUMBER”必须有 OVER 子句

    row_number() over() as ‘自定义字段’

    3)缺点

    不适合多语句查询分页,因为这个是全表查询

    错误写法:

    1. select top 10 * 
    2. from (
    3. select row_number() 
    4. over(order by t.create_time desc) as rowindex,t.* 
    5. from (
    6.         select * from domain_table a
    7.         where 1=1
    8.     ) t
    9. ) new_table
    10. where rowindex>((1-1)*10) and rowindex<=1*10
    11. order by new_table.create_time desc

    正确写法

    1. select top 10 *
    2. from (select row_number()
    3. over(order by create_time desc) as rownumber,*
    4. from domain_table) temp_row
    5. where rownumber>((1-1)*10);

    2、over()函数

    1)order by + 一般是时间字段或者排序字段,必填

    2)函数“ROW_NUMBER”必须有包含 ORDER BY 的 OVER 子句

    3)partition by +字段,可以进行按字段分组,需要也会根据不同分组从1开始

    3、rank()函数

    1)也是为每个分组生成唯一序号,相同值时,序号相同,可用于排行

    2)多用于需要分组并且每个分组有各自从1开始的排序

  • 相关阅读:
    图书馆防盗的窍门
    5.28.1 使用卷积神经网络检测乳腺癌
    Day07 字符串
    01 基于yum方式部署Kubernetes集群
    MySQL中表的增删查改操作(CRUD)
    当小白遇到FullGC
    js实现星空雨随鼠标移动
    python常用函数或库
    HyperLynx(七)微带线串扰的仿真
    跟着顶级科研报告IPCC学绘图:温度折线/柱图/条带/双y轴
  • 原文地址:https://blog.csdn.net/lmy_520/article/details/125321913