国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

【SQL學習筆記】排名開窗函數,聚合開窗函數(Over by)

2024-07-21 02:47:04
字體:
來源:轉載
供稿:網友
【SQL學習筆記】排名開窗函數,聚合開窗函數(Over by)

處理一些分組后,該組按照某列排序后 ,取其中某條完整數據的問題。 或 按照其中不同列分組后的聚合 比如 sum,avg之類。

MSDN上語法:

Ranking Window Functions < OVER_CLAUSE > :: =    OVER ( [ PARTITION BY value_exPRession , ... [ n ] ]           <ORDER BY_Clause> )Aggregate Window Functions < OVER_CLAUSE > :: =     OVER ( [ PARTITION BY value_expression , ... [ n ] ] )

一共兩種應用場景。

場景1:

按某列進行重新分區,然后區內排序后,取其中某條數據。例:

1   select * from (  2    select id,name,counts,row_number() over(partition by name order by counts desc) rn  3    from Table1  4   ) t where t.rn <=1  

   含義:

over(partition by name order by counts desc)
      意思是 把表Table1 中的數據按照 name列進行分區,每個區按照counts進行排序。

row_number() over(partition by name order by counts desc) rn

   意思是 每個區排序后 取到其中排序后的序列號 。并起名字rn

select * from (       select id,name,counts,row_number() over(partition by name order by counts desc) rn       from Table1      ) t where t.rn =1 

  意思是 每個分區排序后,獲取第一行數據,其他行舍棄。

場景二:

結合聚合函數,獲取分區聚合后的值,性能比子查詢還要高。

  

1 SELECT SalesOrderID, ProductID, OrderQty2     ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total'3     ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg'4     ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count'5     ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min'6     ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max'7 FROM Sales.SalesOrderDetail 8 WHERE SalesOrderID IN(43659,43664);

這段是MSDN上的,這的意思是按不同的需要,重新分區(這里是按照SalesOrderID字段分區),獲取相應數據。聚合函數就不多說了。。亮點是,比子查詢性能高(MSDN說的)。

  MSDN的鏈接地址:https://msdn.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌乐县| 二连浩特市| 抚远县| 叶城县| 丽江市| 哈巴河县| 鄂伦春自治旗| 柳江县| 仪征市| 如皋市| 嘉义县| 崇明县| 太白县| 枞阳县| 师宗县| 瓦房店市| 崇州市| 蒲城县| 会东县| 东丰县| 棋牌| 子长县| 桦川县| 喀喇沁旗| 沧州市| 丹寨县| 方正县| 青海省| 射阳县| 台北市| 石屏县| 如东县| 阳城县| 梨树县| 乌兰察布市| 尉氏县| 民乐县| 遂川县| 谢通门县| 淄博市| 高要市|