ORDER BY和ROW_NUMBER() OVER (ORDER BY ...)区别?SQL

在 SQL 查询中,

ORDER BY 子句用于指定排序的字段以及排序的顺序(升序或降序),

ROW_NUMBER() OVER (ORDER BY ...) 则用于为每一行分配一个唯一的序号,并且这个序号是基于指定的排序字段和排序顺序计算的。当然,这两者的作用不完全相同,因此不能简单地说哪一个更好。

下面是它们的主要区别:

  • ORDER BY 子句会对查询结果进行物理排序,而 ROW_NUMBER() OVER (ORDER BY ...) 仅为每一行分配一个序号,不会改变查询结果的顺序。
  • ORDER BY 子句常用于按照某个字段的值进行排序,而 ROW_NUMBER() OVER (ORDER BY ...) 则可以基于多个字段进行排序,并且可以灵活地指定排序顺序。
  • ORDER BY 子句可以使用 ASC 或 DESC 指定排序顺序,而 ROW_NUMBER() OVER (ORDER BY ...) 只能使用 ASC 或 DESC 中的一个,即不能将不同的字段按照不同的顺序排序。
  • ROW_NUMBER() OVER (ORDER BY ...) 通常用于需要对查询结果进行分页的场景,因为它可以为每一页的第一行到最后一行依次分配唯一序号,方便进行分页操作。

因此,在实际使用中,应根据具体的需求来选择适合的方法。

如果只需要对查询结果按照某个字段进行排序,则可以使用 ORDER BY 子句;

如果需要对查询结果进行分页,则可以使用 ROW_NUMBER() OVER (ORDER BY ...)。当然,也可以结合两种方法来实现更加复杂的排序需求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值