国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁阳县| 临漳县| 远安县| 乡城县| 楚雄市| 舞阳县| 额济纳旗| 林周县| 丰台区| 富裕县| 嫩江县| 德钦县| 尼勒克县| 乐安县| 庆云县| 嘉禾县| 瑞安市| 克什克腾旗| 仲巴县| 嘉鱼县| 方正县| 邯郸市| 云浮市| 温泉县| 盱眙县| 钟祥市| 麻城市| 永泰县| 英吉沙县| 无锡市| 林甸县| 恭城| 施甸县| 武汉市| 五寨县| 桐柏县| 高清| 朝阳县| 新疆| 汕头市| 新乡市|