码迷,mamicode.com
首页 > 数据库 > 详细

TSQL入门(二) - 排名函数

时间:2014-11-29 14:32:54      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   使用   sp   for   

over() 开窗函数

排名函数必须和over()一起使用,所以先了解over()。

OVER 子句定义查询结果集内的窗口或用户指定的行集。 然后,开窗函数将计算窗口中每一行的值。

您可以将 OVER 子句与函数一起使用,以便计算各种聚合值,例如移动平均值、累积聚合、运行总计或每组结果的前 N 个结果。

 select *,COUNT(*) over() 全班人数 from   Student 

bubuko.com,布布扣

 

  select *,COUNT(*) over(partition by Ssex) 性别人数 from   Student  --over()中加入partition by Ssex表示 按Ssex字段分组 男女分别为4人。

bubuko.com,布布扣

  排名函数

4种排名:1.ROW_NUMBER() , 2.RANK(), 3.dense_rank(), 4.NTILE(N)

row_number() over(order by field) 根据over中order by 字段进行排名 输出结果为有序的行号

rank() over(order by field) 根据over中order by 字段进行排名 输出结果为排名序号有并列而且会断号 

dense_rank() over(order by field) 根据over中order by 字段进行排名 输出结果为排名序号有并列不会断号

ntile(N) over(order by field) ) 根据over中order by 字段进行排名 并根据ntile(N)中类型为int参数N进行分组

 select *,ROW_NUMBER() over(order by year(sage)) rownumber行号, 
          RANK() over(order by year(sage)) rank有并列而且会出现断号,
          dense_rank() over (order by year(sage)) dense_rank密集排名,
          NTILE(4) over(order by year(sage)) 分组排名 from  Student 

 

bubuko.com,布布扣

 

也可以在over中加入partition by 

  select *,ROW_NUMBER() over(partition by year(sage)  order by year(sage)) rownumber行号  ,
                  RANK() over( partition by year(sage) order by year(sage)) rank有并列而且会出现断号    ,
                  dense_rank() over ( partition by year(sage) order by year(sage)) dense_rank密集排名, 
                   NTILE(4) over(partition by  year(sage) order by year(sage)) 分组排名from  Student 

bubuko.com,布布扣

补充:with ties 

指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n (PERCENT) 行最后的 ORDER BY 列中的值相同的值。

  select top 3 with ties  * from Student order by year(sage) --只取前3行,如果最后第3行中sage的年份和后面的年份相同,则附加随后的行

bubuko.com,布布扣

 

TSQL入门(二) - 排名函数

标签:style   blog   http   io   ar   color   使用   sp   for   

原文地址:http://www.cnblogs.com/yangjingqi/p/4130699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!