小議分析函式中排序對結果的影響(二)
分析函式中經常會包括ORDER BY語句,而這個語句會對Oracle的執行結果產生影響。
繼續討論複雜一些的情況。
小議分析函式中排序對結果的影響(一):http://yangtingkun.itpub.net/post/468/476949
分析函式中經常會包括ORDER BY語句,而這個語句會對Oracle的執行結果產生影響。
繼續討論複雜一些的情況。
小議分析函式中排序對結果的影響(一):http://yangtingkun.itpub.net/post/468/476949
仍然沿用上面一篇文章的例子:
SQL> SELECT * FROM T;
ID NAME
---------- ------------------------------
1 A
3 C
2 B
如果不加任何的排序,直接查詢T表,Oracle根據記錄讀取的順序返回記錄,得到的結果是1、3、2。
上一篇討論瞭如果加上包括排序的分析函式,會對結果造成何種影響,下面描述一下,出現多個排序不同的分析函式,會如何影響查詢結果。
SQL> SELECT ID,
2 NAME,
3 SUM(ID) OVER(ORDER BY ID) SUM1,
4 SUM(ID) OVER(ORDER BY ID DESC) SUM2
5 FROM T;
ID NAME SUM1 SUM2
---------- ------------------------------ ---------- ----------
3 C 6 3
2 B 3 5
1 A 1 6
SQL> SELECT ID,
2 NAME,
3 SUM(ID) OVER(ORDER BY ID DESC) SUM1,
4 SUM(ID) OVER(ORDER BY ID) SUM2
5 FROM T;
ID NAME SUM1 SUM2
---------- ------------------------------ ---------- ----------
1 A 6 1
2 B 5 3
3 C 3 6
看樣子,Oracle採用了第二個出現的排序操作,作為最終結果返回的排序次序,而與排序是升序還是降序沒有關係。
如果再增加新的排序操作呢:
SQL> SELECT ID,
2 NAME,
3 SUM(ID) OVER(ORDER BY ID) SUM1,
4 SUM(ID) OVER(ORDER BY ID DESC) SUM2,
5 MAX(ID) OVER(ORDER BY ID) MAX1
6 FROM T;
ID NAME SUM1 SUM2 MAX1
---------- ------------------------------ ---------- ---------- ----------
3 C 6 3 3
2 B 3 5 2
1 A 1 6 1
SQL> SELECT ID,
2 NAME,
3 SUM(ID) OVER(ORDER BY ID DESC) SUM1,
4 SUM(ID) OVER(ORDER BY ID) SUM2,
5 MAX(ID) OVER(ORDER BY ID DESC) MAX1
6 FROM T;
ID NAME SUM1 SUM2 MAX1
---------- ------------------------------ ---------- ---------- ----------
1 A 6 1 3
2 B 5 3 3
3 C 3 6 3
這個現象無非是兩種情況,一種是SUM的排序優先順序比MAX高,另一種就是對於Oracle來說,總會選擇後出現的那種排序最為最終的排序結果。
SQL> SELECT ID,
2 NAME,
3 MAX(ID) OVER(ORDER BY ID) MAX1,
4 MIN(ID) OVER(ORDER BY ID) MIN1,
5 MAX(ID) OVER(ORDER BY ID DESC) MAX2,
6 SUM(ID) OVER(ORDER BY ID) SUM1
7 FROM T;
ID NAME MAX1 MIN1 MAX2 SUM1
---------- ------------------------------ ---------- ---------- ---------- ----------
3 C 3 1 3 6
2 B 2 1 3 3
1 A 1 1 3 1
這個例子就可以充分說明問題了,對於當前的情況,只有兩種排序的可能性,ID升序和ID降序,Oracle選擇了最後出現的那種排序操作作為了最終的排序結果。
將問題擴充套件多多列的情況:
SQL> INSERT INTO T VALUES (4, 'E');
已建立 1 行。
SQL> INSERT INTO T VALUES (5, 'D');
已建立 1 行。
SQL> COMMIT;
提交完成。
SQL> SELECT * FROM T;
ID NAME
---------- ------------------------------
4 E
5 D
1 A
3 C
2 B
SQL> COL NAME FORMAT A5
SQL> SELECT ID,
2 NAME,
3 MAX(ID) OVER(ORDER BY ID) MAX1,
4 MAX(ID) OVER(ORDER BY ID DESC) MAX2,
5 MAX(ID) OVER(ORDER BY NAME) MAX3,
6 MAX(ID) OVER(ORDER BY NAME DESC) MAX4
7 FROM T;
ID NAME MAX1 MAX2 MAX3 MAX4
---------- ----- ---------- ---------- ---------- ----------
4 E 4 5 5 4
5 D 5 5 5 5
3 C 3 5 3 5
2 B 2 5 2 5
1 A 1 5 1 5
Oracle總會選擇最後出現的分析函式中的排序方法,作為整個結果集的排序方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-536542/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 小議分析函式中排序對結果的影響(一)函式排序
- 探索webpack熱更新對程式碼打包結果的影響(二)Web
- ASP中函式呼叫對引數的影響 (轉)函式
- DDL,DML操作對結果快取的影響快取
- 嚴格模式對parseInt()函式的影響模式函式
- SQL查詢結果集對注入的影響及利用SQL
- 【SQL*Plus】直接X掉視窗對SQL*Plus中的操作結果的影響SQL
- 探索webpack熱更新對程式碼打包結果的影響(一)Web
- Oracle中實現查詢結果按照in中條件排序 InStr函式Oracle排序函式
- mysql事務對效率的影響分析總結JILEMySql
- DUMP函式結果的意思函式
- 源資料檔案(.csv)中的空格串和空串對pandas讀取結果的影響
- Oracle中過程/函式返回結果集Oracle函式
- 磁碟排序對Oracle資料庫效能的影響排序Oracle資料庫
- 索引及排序對執行計劃的影響索引排序
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- Laravel 根據 relation sum 結果排序的小技巧Laravel排序
- python中函式如何返回多個結果?Python函式
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- 聊聊Oracle排序分析函式Oracle排序函式
- 排序(對於 sort 函式的使用)排序函式
- ORDER對查詢結果進行排序排序
- 突然斷電,是否會影響Mysql的執行結果MySql
- Oracle11新特性——PLSQL函式快取結果(二)OracleSQL函式快取
- 函式小結函式
- delete語句對索引的影響之分析delete索引
- 【分析方法論】屬性對行為的影響分析
- hive視窗分析函式使用詳解系列二之分組排序視窗函式Hive函式排序
- jQuery操作iframe中js函式的方法小結jQueryJS函式
- 【實驗】【外來鍵】小議外來鍵約束對應用程式的影響
- 軟體測試工具LoadRunner結果分析中的響應時間
- mongodb常用的兩種group方法,以及對結果排序MongoDB排序
- 修改主機時區對Oracle的影響分析Oracle
- 函式ZwQuerySystemInformation小結函式ORM
- Oracle 函式小結Oracle函式
- RANK函式小結函式
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- 中金公司:疫情對市場及盈利的影響分析(附下載)