亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

sql server如何利用開窗函數over()進行分組統計

2024-08-31 01:03:44
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了sql server利用開窗函數over()進行分組統計的相關資料,需要的朋友可以參考下
 

這是一道常見的面試題,在實際項目中經常會用到。

需求:求出以產品類別為分組,各個分組里價格最高的產品信息。

實現過程如下:

declare @t table(ProductID int,ProductName varchar(20),ProductType varchar(20),Price int)

--測試數據

insert @tselect 1,'name1','P1',3 union allselect 2,'name2','P1',5 union allselect 3,'name3','P2',4 union allselect 4,'name4','P2',4

--做法一:找到每個組里,價格最大的值;然后再找出每個組里價格等于這個值的
--缺點:要進行一次join

select t1.* from @t t1 join (select ProductType,  max(Price) Price  from @t  group by ProductType) t2 on t1.ProductType = t2.ProductType where t1.Price = t2.Price order by ProductType

--做法二:利用over(),將統計信息計算出來,然后直接篩選結果集。
--over() 可以讓函數(包括聚合函數)與行一起輸出。

;with cte as( select *, max(Price) over(partition by (ProductType)) MaxPrice from @t)select ProductID,ProductName,ProductType,Price from cte where Price = MaxPrice order by ProductType

--over() 的語法為:over([patition by ] <order by >)。需要注意的是,over() 前面是一個函數,如果是聚合函數,那么order by 不能一起使用。
--over() 的另一常用情景是與 row_number() 一起用于分頁。

現在來介紹一下開窗函數。

窗口函數OVER()指定一組行,開窗函數計算從窗口函數輸出的結果集中各行的值。 

開窗函數不需要使用GROUP BY就可以對數據進行分組,還可以同時返回基礎行的列和聚合列。  

1.排名開窗函數

ROW_NUMBER、DENSE_RANK、RANK、NTILE屬于排名函數。

排名開窗函數可以單獨使用ORDER BY 語句,也可以和PARTITION BY同時使用。

PARTITION BY用于將結果集進行分組,開窗函數應用于每一組。

ODER BY 指定排名開窗函數的順序。在排名開窗函數中必須使用ORDER BY語句。

例如查詢每個雇員的定單,并按時間排序

WITH OrderInfo AS( SELECT ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY OrderDate) AS Number, OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK)) SELECT Number,OrderID,CustomerID, EmployeeID ,OrderDateFrom OrderInfo WHERE Number BETWEEN 0 AND 10

窗口函數根據PARTITION BY語句按雇員ID對數據行分組,然后按照ORDER BY 語句排序,排名函數ROW_NUMBER()為每一組的數據分從1開始生成一個序號。 

ROW_NUMBER()為每一組的行按順序生成一個唯一的序號

RANK()也為每一組的行生成一個序號,與ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值會生成相同的序號,并且接下來的序號是不連序的。例如兩個相同的行生成序號3,那么接下來會生成序號5。

DENSE_RANK()和RANK()類似,不同的是如果有相同的序號,那么接下來的序號不會間斷。也就是說如果兩個相同的行生成序號3,那么接下來生成的序號還是4。

NTILE (integer_expression) 按照指定的數目將數據進行分組,并為每一組生成一個序號。

2.聚合開窗函數

很多聚合函數都可以用作窗口函數的運算,如SUM,AVG,MAX,MIN。

聚合開窗函數只能使用PARTITION BY子句或都不帶任何語句,ORDER BY不能與聚合開窗函數一同使用。

例如,查詢雇員的定單總數及定單信息

WITH OrderInfo AS(SELECT COUNT(OrderID) OVER(PARTITION BY EmployeeID) AS TotalCount,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK))SELECT OrderID,CustomerID, EmployeeID ,OrderDate,TotalCountFrom OrderInfo ORDER BY EmployeeID 

如果窗口函數不使用PARTITION BY 語句的話,那么就是不對數據進行分組,聚合函數計算所有的行的值。

WITH OrderInfo AS( SELECT COUNT(OrderID) OVER() AS Count,OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK))

以上就是本文的全部內容,希望大家可以學會sql server利用開窗函數進行分組統計的方法,謝謝大家的閱讀。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩亚洲一区二区三区| 欧美精品久久一区二区| 久久精品人人爽| 中日韩美女免费视频网站在线观看| 爽爽爽爽爽爽爽成人免费观看| 米奇精品一区二区三区在线观看| 亚洲深夜福利视频| 97在线日本国产| 免费97视频在线精品国自产拍| 日本一区二区在线免费播放| 日韩美女毛茸茸| 久久中文字幕一区| 亚洲男人天堂2023| 欧美黑人性视频| 色综合男人天堂| 91九色国产在线| 国产午夜精品视频免费不卡69堂| 欧美激情网站在线观看| 国产午夜精品视频| 欧美电影《睫毛膏》| 91手机视频在线观看| 国产精品h在线观看| 国产999在线观看| 黄色成人在线免费| 在线免费看av不卡| 国产欧亚日韩视频| 欧美激情视频免费观看| 欧美精品videossex性护士| 国产一区红桃视频| 91在线色戒在线| 亚洲欧洲黄色网| 亚洲精品白浆高清久久久久久| 66m—66摸成人免费视频| 一区二区三区 在线观看视| 国产精品美女免费| 久久久久久久999精品视频| 久久精品影视伊人网| 欧美激情第1页| 亚洲美女视频网| 欧美视频在线观看免费网址| 亚洲999一在线观看www| 精品magnet| 欧美色xxxx| 国产精品久久久久久久久久久新郎| 亚洲欧美激情精品一区二区| 亚洲另类xxxx| 亚洲精品短视频| 中文字幕久热精品在线视频| 久久久久久久久久久免费| 亚洲激情在线观看| 国产91精品久久久久久久| 日韩精品极品在线观看| 久久男人资源视频| 国模视频一区二区| 欧美大片免费观看在线观看网站推荐| 亚洲一区二区在线| 久久久久成人精品| 午夜美女久久久久爽久久| 国产精品自在线| 亚洲欧美变态国产另类| 国产精品一久久香蕉国产线看观看| 一区二区欧美亚洲| 国产91精品久久久久久| 日韩不卡中文字幕| 日韩高清电影好看的电视剧电影| 国产视频观看一区| 亚洲国内精品在线| 久久久成人av| 97在线精品国自产拍中文| 亚洲精品白浆高清久久久久久| 久久激情五月丁香伊人| 亚洲成色www8888| 91精品在线影院| 亚洲电影免费观看高清完整版在线| 久久久久国产精品www| 亚洲在线视频观看| 亚洲护士老师的毛茸茸最新章节| 粉嫩老牛aⅴ一区二区三区| 成人激情春色网| 中文字幕在线日韩| 国产精彩精品视频| 午夜精品一区二区三区在线视频| 日韩精品高清在线| 久久久久久久久久av| 精品亚洲aⅴ在线观看| 国产精品久久久91| 国产综合在线观看视频| 国产视频精品自拍| 在线观看欧美日韩| 成人激情视频免费在线| 国产亚洲欧美另类中文| 久久69精品久久久久久国产越南| 欧美一区二三区| 欧美一级片一区| 日韩av片永久免费网站| 91精品一区二区| 午夜剧场成人观在线视频免费观看| 日韩欧美在线第一页| 97激碰免费视频| 亚洲欧美日韩精品久久| 91精品视频在线播放| 精品视频久久久久久| 亚洲成人黄色网址| 国产专区精品视频| 最新中文字幕亚洲| 亚洲电影成人av99爱色| 日韩免费在线看| 社区色欧美激情 | 久久久精品电影| 亚洲激情免费观看| 成人网在线免费观看| 在线不卡国产精品| 亚洲欧美日韩成人| 日韩欧美一区视频| 国产精品久久久久久久久久久久久久| 国产一区二区三区视频| 国产精品日日做人人爱| 亚洲国产日韩一区| 日本欧美爱爱爱| 91美女片黄在线观| www.久久色.com| 久久99亚洲热视| 97精品国产97久久久久久| 国产精品1区2区在线观看| 欧美成在线视频| 成人午夜高潮视频| 日韩电影在线观看永久视频免费网站| 亚洲最大福利网站| 国产精品色婷婷视频| 国产精品91在线观看| 538国产精品一区二区在线| 成人综合国产精品| 欧美裸体xxxx| 国产精品ⅴa在线观看h| 亚洲free性xxxx护士hd| 欧美黄色三级网站| 97精品国产97久久久久久免费| 18一19gay欧美视频网站| 国产成人综合av| 日韩精品中文字幕在线| 蜜月aⅴ免费一区二区三区| 国产日韩欧美综合| 亚洲人成免费电影| 97精品视频在线观看| 日本成人激情视频| 亚洲毛片在线观看.| 欧美在线免费视频| 亚洲自拍偷拍色片视频| 亚洲自拍欧美色图| 久久免费成人精品视频| 国产一区二区香蕉| 久久99精品久久久久久青青91| 欧洲亚洲在线视频| 日韩av色在线| 久久久www成人免费精品| 国产精品亚洲激情| 欧美成人四级hd版| 亚洲欧美日韩另类| 91视频九色网站| 疯狂做受xxxx欧美肥白少妇| 国产精品91视频| 日本久久久久亚洲中字幕| 国模精品视频一区二区三区| 中文字幕亚洲欧美日韩2019|