Over子句

        Over子句用于为行定义一个窗口(window),以便进行特定的运算。可以把行的窗口简单地认为是运算符的一个行的集合。例如聚合函数和排名函数都是可以支持Over子句的运算类型。由于Over为这些函数提供了一个行的接口,所以这些函数也被称之为开窗函数(window function)。
        聚合开窗函数使用Over子句提供的窗口作为上下文,对窗口中的一组值进行操作,而不是使用Group By子句提供的上下文。这样就不必对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列。
        如果我们想对行进行限制或分区,则可以使用Partition By子句。例如,现在不想返回所有的行,只是想返回当前用户的总价格,则可以指定Sum(val) Over(Partition By custid)
        Over子句也支持四种排名函数:Row_Number(行号) ,Rank(排名),DENSE_RANK(密集排名),以及NTILE.
        Row_Number函数用于为查询的结果集中的各行分配递增的序列号,其逻辑顺序通过Over子句中的Order By语句进行指定。

        NTILE函数可以把结果中的行关联到组,并为每一行分配一个所属组的编号。NTILE接收一个表示组数量的输入参数,并要在Over子句中指定逻辑顺序。

--查询1-10的数据
SELECT * FROM 
(
SELECT sum(CODE_ACT_LEN) over(partition by REC_CREATOR) AS TotalCode_Len
      ,ROW_NUMBER() OVER(ORDER BY REC_ID) AS RN
      ,RANK() OVER(ORDER BY REC_ID) AS R
      ,DENSE_RANK() OVER(ORDER BY REC_ID) AS DR
      ,NTILE(10) OVER(ORDER BY REC_ID) AS N
  FROM [BGMES].[dbo].[TTS0091]
) N
WHERE N.RN > 0 AND N.RN <= 10


猜你喜欢

转载自blog.csdn.net/xc917563264/article/details/80900084