關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深度學習——loss函式的學習筆記深度學習函式筆記
- async函式學習筆記。函式筆記
- 生成函式 學習筆記函式筆記
- 關於網路安全的逆向分析方向學習筆記筆記
- Golang學習筆記-1.6 函式Golang筆記函式
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- MYSQL學習筆記14: 函式MySql筆記函式
- python學習筆記(六)——函式Python筆記函式
- TS學習筆記(四):函式筆記函式
- Oracle學習筆記(6)——函式Oracle筆記函式
- 學習筆記:javascript中的Generator函式筆記JavaScript函式
- 關於http(自己的學習筆記)HTTP筆記
- Myth 關於Git的學習筆記Git筆記
- MYSQL學習筆記7: 聚合函式MySql筆記函式
- C++學習筆記(二)——函式C++筆記函式
- OpenCV學習筆記(4)——mixChannels函式OpenCV筆記函式
- OpenCV學習筆記(5)——normalize函式OpenCV筆記ORM函式
- Flutter學習筆記(4)--Dart函式Flutter筆記Dart函式
- js純函式學習筆記(一)JS函式筆記
- c語言學習筆記===函式C語言筆記函式
- Matlab學習筆記(1)——imshow函式的使用Matlab筆記函式
- MYSQL學習筆記15: 數值函式MySql筆記函式
- PHP 第八週函式學習筆記PHP函式筆記
- JavaScript學習筆記(七)—— 再說函式JavaScript筆記函式
- 工作學習筆記(三)to_char函式筆記函式
- pandas之常用基本函式學習筆記函式筆記
- 莫比烏斯函式 - 學習筆記函式筆記
- TypeScript 學習筆記 — 函式中的型別(四)TypeScript筆記函式型別
- javascript學習筆記--函式的返回值可以是一個函式JavaScript筆記函式
- ES6學習筆記(三)【函式,物件】筆記函式物件
- Solidity語言學習筆記————28、純函式Solid筆記函式
- Solidity語言學習筆記————26、回退函式Solid筆記函式
- Python學習筆記_函式_匯入模組Python筆記函式
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- day10學習筆記之函式上筆記函式
- PHP 第十五週函式學習筆記PHP函式筆記
- 好程式設計師學習筆記:函式程式設計師筆記函式
- JavaScript學習筆記(二)——函式和陣列JavaScript筆記函式陣列
- hive學習筆記之七:內建函式Hive筆記函式