• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

norman

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

SQL Server 2005学习总结:排名函数

Transact-SQL提供了4个排名函数: RANK(),DENSE_RANK(),ROW_NUMBER(),NTILE(),下文是对这4个函数进行的解释。
--演示例题,建一个table

 create table rankorder(
  orderid int,
  qty int
  )
  go

  --插入数据

    insert rankorder values(30,10)
  insert rankorder values(10,10)
  insert rankorder values(80,10)
  insert rankorder values(40,10)
  insert rankorder values(30,15)
  insert rankorder values(30,20)
  insert rankorder values(22,20)
  insert rankorder values(21,20)
  insert rankorder values(10,30)
  insert rankorder values(30,30)
  insert rankorder values(40,40)
  go

  --查询出各类排名

      SELECT orderid,qty,
  ROW_NUMBER() OVER(ORDER BY qty) AS rownumber,
  RANK() OVER(ORDER BY qty) AS [rank],
  DENSE_RANK() OVER(ORDER BY qty) AS denserank ,
  NTILE(3) OVER(ORDER BY qty) AS [NTILE]
  FROM rankorder
  ORDER BY qty

  --结果

  --ROW_NUMBER()是按qty由小到大逐一排名,不并列,排名连续

  --RANK()是按qty由小到大逐一排名,并列,排名不连续

  --DENSE_RANK()是按qty由小到大逐一排名,并列,排名连续

  --NTILE()是按qty由小到大分成3组逐一排名,并列,排名连续

    orderid qty rownumber rank denserank NTILE
  30 10 1 1 1 1
  10 10 2 1 1 1
  80 10 3 1 1 1
  40 10 4 1 1 1
  30 15 5 5 2 2
  30 20 6 6 3 2
  22 20 7 6 3 2
  21 20 8 6 3 2
  10 30 9 9 4 3
  30 30 10 9 4 3
  40 40 11 11 5 3

以下是我对4个排名函数的类比表格:

  排名连续性 排名并列性

  RANK() 不一定连续 有并列

  DENSE_RANK() 连续 有并列

  ROW_NUMBER() 连续 无并列

  NTILE() 连续 有并列

posted on 2008-08-29 16:16  strgvi  阅读(234)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3