最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Sql Server 開窗函數(shù)Over()的使用實例詳解

 更新時間:2018年05月30日 14:13:25   作者:天豪  
這篇文章主要介紹了Sql Server 開窗函數(shù)Over()的使用,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

利用over(),將統(tǒng)計信息計算出來,然后直接篩選結(jié)果集

declare @t table(
ProductID int,
ProductName varchar(20),
ProductType varchar(20),
Price int)
insert @t
select 1,'name1','P1',3 union all
select 2,'name2','P1',5 union all
select 3,'name3','P2',4 union all
select 4,'name4','P2',4

查詢要求:查出每類產(chǎn)品中價格最高的信息

--做法一:找到每個組里,價格最大的值;然后再找出每個組里價格等于這個值的
--缺點:要進行一次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(),將統(tǒng)計信息計算出來,然后直接篩選結(jié)果集。
--over() 可以讓函數(shù)(包括聚合函數(shù))與行一起輸出。 

 ;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() 前面是一個函數(shù),如果是聚合函數(shù),那么order by 不能一起使用。

--over() 的另一常用情景是與 row_number() 一起用于分頁。

現(xiàn)在來介紹一下開窗函數(shù)

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

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

1.排名開窗函數(shù)

ROW_NUMBER、DENSE_RANK、RANK、NTILE屬于排名函數(shù)。

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

PARTITION BY用于將結(jié)果集進行分組,開窗函數(shù)應(yīng)用于每一組。

ODER BY 指定排名開窗函數(shù)的順序。在排名開窗函數(shù)中必須使用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 ,OrderDate
From OrderInfo WHERE Number BETWEEN 0 AND 10

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

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

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

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

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

2.聚合開窗函數(shù)

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

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

例如,查詢雇員的定單總數(shù)及定單信息

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

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

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

總結(jié)

以上所述是小編給大家介紹的Sql Server 開窗函數(shù)Over()的使用實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SQL?Server中.BAK?文件損壞的原因及解決方法

    SQL?Server中.BAK?文件損壞的原因及解決方法

    在?SQL?Server?中,備份通常存儲在擴展名為?.BAK?的文件中,當服務(wù)器或數(shù)據(jù)庫文件發(fā)生事故或問題需要恢復(fù)數(shù)據(jù)時,備份非常有用,但是,SQL?數(shù)據(jù)庫備份?(.BAK)?文件也可能由于各種因素而損壞,本文介紹了SQL?Server?.BAK?文件損壞的解決方法,需要的朋友可以參考下
    2024-08-08
  • msSQL中having的用處詳解

    msSQL中having的用處詳解

    關(guān)于SQL中的HAVING,相信大家都不陌生,它往往與GROUP?BY配合使用,為聚合操作指定條件,下面這篇文章主要給大家介紹了關(guān)于msSQL中having用處的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 通過系統(tǒng)數(shù)據(jù)庫獲取用戶所有數(shù)據(jù)庫中的視圖、表、存儲過程

    通過系統(tǒng)數(shù)據(jù)庫獲取用戶所有數(shù)據(jù)庫中的視圖、表、存儲過程

    本文主要講了通過系統(tǒng)數(shù)據(jù)庫獲取用戶所有數(shù)據(jù)庫中的視圖、表、存儲過程的方法,大家參考使用吧
    2014-04-04
  • SQL Server 2000的安全配置

    SQL Server 2000的安全配置

    SQL Server 2000的安全配置...
    2006-10-10
  • SQL查詢連續(xù)登陸7天以上的用戶的方法實現(xiàn)

    SQL查詢連續(xù)登陸7天以上的用戶的方法實現(xiàn)

    本文主要介紹了SQL查詢連續(xù)登陸7天以上的用戶的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • SQL Server Bulk Insert 只需要部分字段時的方法

    SQL Server Bulk Insert 只需要部分字段時的方法

    上午在找Bulk Insert的資料看,還轉(zhuǎn)了一篇。不巧今天下午就用上了,我遇到的需求是導(dǎo)出表A中的N個字段,然后導(dǎo)入到表B的N個字段當中。
    2011-10-10
  • SQL查詢排序?qū)ull值排到最后的兩種解決方法

    SQL查詢排序?qū)ull值排到最后的兩種解決方法

    本文介紹在SQL查詢排序時,如果遇到NULL值,如何根據(jù)實際業(yè)務(wù)需求,控制將NULL值排在最后或最前邊,文中給出了兩種解決方法,通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2023-12-12
  • SQL年齡計算的兩種方法實例

    SQL年齡計算的兩種方法實例

    在做sql內(nèi)容的時候遇到了問題,不知道如何根據(jù)出生日期計算年齡,所以整理出了計算年齡的兩種方法,下面這篇文章主要給大家介紹了關(guān)于SQL年齡計算的兩種方法,需要的朋友可以參考下
    2022-06-06
  • SQL Server的基本功能性語句介紹

    SQL Server的基本功能性語句介紹

    本篇文章介紹了,SQL Server的基本功能性語句。需要的朋友參考下
    2013-04-04
  • 如何在Elasticsearch中啟用和使用SQL功能

    如何在Elasticsearch中啟用和使用SQL功能

    Elasticsearch SQL適用于需要對大量數(shù)據(jù)進行復(fù)雜查詢的場景,如數(shù)據(jù)分析、報表生成、數(shù)據(jù)探索等,這篇文章給大家介紹在Elasticsearch中啟用和使用SQL功能,感興趣的朋友跟隨小編一起看看吧
    2024-07-07

最新評論

定南县| 鄂伦春自治旗| 湖州市| 迭部县| 阿城市| 鄂州市| 西盟| 宝坻区| 固原市| 图片| 永靖县| 西宁市| 天等县| 句容市| 天气| 宜阳县| 上蔡县| 左云县| 平乐县| 呼和浩特市| 鲜城| 南城县| 墨玉县| 农安县| 连州市| 景东| 房山区| 怀远县| 怀集县| 广西| 原平市| 乌海市| 繁峙县| 鄯善县| 柳江县| 弋阳县| 平邑县| 宁波市| 梨树县| 崇信县| 买车|