關於SQLServer2005的學習筆記——分析函式
此外根據測試MAX,MIN,AVG之類的統計函式還是可以在分析函式中應用的,不過和Oracle的處理有點不一樣,好像無法應用OVER中的ORDER BY 子句,大概是不夠成熟導致的。
SQLServer2005提供的函式也遠不如Oracle10G來的豐富,類似STDDEV之類的統計分析函式僅在MDX中提供;不過其他一些資料分佈的分析函式可以採用變通的方式予以實現。
經過測試,以下程式碼可以在SQLServer2005和Oracle10g中同時執行,結果順序有少許不一致。
--建立相關測試表
CREATE TABLE Sales ( EmpID VARCHAR(10) NOT NULL PRIMARY KEY, MgrID VARCHAR(10) NOT NULL, Qty INT NOT NULL ); INSERT INTO Sales VALUES('A','Z',300); INSERT INTO Sales VALUES('B','X',100); INSERT INTO Sales VALUES('C','X',200); INSERT INTO Sales VALUES('D','Y',200); INSERT INTO Sales VALUES('E','Z',250); INSERT INTO Sales VALUES('F','Z',300); INSERT INTO Sales VALUES('G','X',100); INSERT INTO Sales VALUES('H','Y',150); INSERT INTO Sales VALUES('I','X',250); INSERT INTO Sales VALUES('J','Z',100); INSERT INTO Sales VALUES('K','Y',250);
|
--ROW_NUMBER函式
SELECT EmpID,MgrID,Qty, ROW_NUMBER() OVER(ORDER BY Qty) AS RowNum_BY_Qty, ROW_NUMBER() OVER(ORDER BY Qty,EmpID) AS RowNum_BY_EmpIDQty, ROW_NUMBER() OVER(PARTITION BY MgrID ORDER BY Qty,EmpID) AS RowNum_BY_MgrID_EmpIDQty FROM Sales ORDER BY Qty --等效語句 SELECT EmpID,Qty, (SELECT COUNT(*) FROM Sales S2
WHERE S2.Qty OR (S2.Qty=S1.Qty AND S2.EmpID<=S1.EmpID)) RowNum FROM Sales S1 ORDER BY Qty,EmpID --等效語句 SELECT MgrID,EmpID,Qty, (SELECT COUNT(*) FROM Sales S2 WHERE S2.MgrID=S1.MgrID
AND (S2.Qty OR (S2.Qty=S1.Qty AND S2.EmpID<=S1.EmpID))) RowNum FROM Sales S1 ORDER BY MgrID,Qty,EmpID
|
--RANK函式和DENSE_RANK函式
SELECT EmpID,MgrID,Qty, RANK() OVER(ORDER BY Qty) AS Rank, DENSE_RANK() OVER(ORDER BY Qty) AS Dense_Rank, RANK() OVER(PARTITION BY MgrID ORDER BY Qty) AS Rank_Partition, DENSE_RANK() OVER(PARTITION BY MgrID ORDER BY Qty) AS Dense_Rank_Partition FROM Sales ORDER BY Qty
|
--NTILE函式
SELECT EmpID,MgrID,Qty, NTILE(3) OVER(ORDER BY Qty) AS Ntile_BY_Qty, NTILE(3) OVER(ORDER BY Qty,EmpID) AS Ntile_BY_EmpIDQty, NTILE(3) OVER(PARTITION BY MgrID ORDER BY Qty,EmpID) AS Ntile_BY_MgrID_EmpIDQty FROM Sales ORDER BY MgrID,Qty |
關於這些函式的實現原理和Oracle是完全一致的,在此不多做敘述
詳情參見以下連結:
Oracle分析函式二——函式用法
Oracle分析函式三——SUM,AVG,MIN,MAX,COUNT
Oracle分析函式四——函式RANK,DENSE_RANK,FIRST,LAST…
Oracle分析函式五——統計分析函式
Oracle分析函式六——資料分佈函式及報表函式
Oracle分析函式七——分析函式案例
Oracle分析函式八——CUBE,ROLLUP
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-625190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分析函式(學習筆記)函式筆記
- 關於SQLServer2005的學習筆記(一)——前言SQLServer筆記
- 關於SQLServer2005的學習筆記——生日問題SQLServer筆記
- 關於SQLServer2005的學習筆記——子查詢SQLServer筆記
- 關於SQLServer2005的學習筆記——XML的處理SQLServer筆記XML
- oracle學習筆記8: 分析函式Oracle筆記函式
- 關於SQLServer2005的學習筆記——樹形結構SQLServer筆記
- 關於SQLServer2005的學習筆記——SQL查詢解析步驟SQLServer筆記
- 關於SQLServer2005的學習筆記——自定義分組的實現SQLServer筆記
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 關於SQLServer2005的學習筆記——異常捕獲及處理SQLServer筆記
- async函式學習筆記。函式筆記
- Go 函式 學習筆記Go函式筆記
- 生成函式 學習筆記函式筆記
- 關於SQLServer2005的學習筆記——臨時表、表變數和CTESQLServer筆記變數
- 關於SQLServer2005的學習筆記——多觸發器執行問題SQLServer筆記觸發器
- 關於網路安全的逆向分析方向學習筆記筆記
- TS學習筆記(四):函式筆記函式
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- Golang學習筆記-1.6 函式Golang筆記函式
- Oracle學習筆記(6)——函式Oracle筆記函式
- LoadRunner函式學習筆記函式筆記
- MYSQL學習筆記14: 函式MySql筆記函式
- 學習筆記:javascript中的Generator函式筆記JavaScript函式
- 關於http(自己的學習筆記)HTTP筆記
- 分析函式的學習函式
- 關於SQLServer2005的學習筆記——CTE遞迴和模擬測試資料SQLServer筆記遞迴
- python學習筆記(六)——函式Python筆記函式
- OpenCV學習筆記(4)——mixChannels函式OpenCV筆記函式
- OpenCV學習筆記(5)——normalize函式OpenCV筆記ORM函式
- Flutter學習筆記(4)--Dart函式Flutter筆記Dart函式
- js純函式學習筆記(一)JS函式筆記
- C++學習筆記(二)——函式C++筆記函式
- c語言學習筆記===函式C語言筆記函式
- 【C#學習筆記】函式呼叫C#筆記函式
- 學習筆記-----一時間函式筆記函式
- MYSQL學習筆記7: 聚合函式MySql筆記函式
- 關於SQLServer2005的學習筆記——約束、Check、觸發器的執行順序SQLServer筆記觸發器