oracle 高階分組group by cube擴充
oracle的cube擴充功能會將cube()裡指定的每一列按照順序替換成null值,並返回指定列的所有組合。
oracle的cube分組擴充主要用於替換需要透過union all和goup by 組合來實現業務功能的場景。透過該函式可以節省程式碼量,且使程式碼更加簡潔。
實驗過程如下:
首先看一下A表的內容:
HR@ORA11GR2 > select * from a;
A A2 A3
---------- ---------- ----------
1 4 5
2 4 6
3 4 7
4 5 9
5 5 10
6 5 11
7 5 12
8 5 13
8 rows selected.
若要透過union all 來實現資料組合功能:
HR@ORA11GR2 > with temp as (
2 select a, a2 from a
3 union all
4 select a , null a2 from a
5 union all
6 select null a , a2 from a
7 union all
8 select null a , null a2 from a
9 )
10 select * from temp group by a, a2 order by a2 desc;
A A2
---------- ----------
1
2
3
4
5
6
7
8
4 5
5 5
A A2
---------- ----------
6 5
7 5
8 5
5
1 4
2 4
3 4
4
19 rows selected.
使用cube分組擴充結果:
HR@ORA11GR2 > select a, a2 from a group by cube(a, a2) order by a2 desc;
A A2
---------- ----------
1
2
3
4
5
6
7
8
4 5
5 5
A A2
---------- ----------
6 5
7 5
8 5
5
1 4
2 4
3 4
4
19 rows selected.
實驗如下:
oracle的cube分組擴充主要用於替換需要透過union all和goup by 組合來實現業務功能的場景。透過該函式可以節省程式碼量,且使程式碼更加簡潔。
實驗過程如下:
首先看一下A表的內容:
HR@ORA11GR2 > select * from a;
A A2 A3
---------- ---------- ----------
1 4 5
2 4 6
3 4 7
4 5 9
5 5 10
6 5 11
7 5 12
8 5 13
8 rows selected.
若要透過union all 來實現資料組合功能:
HR@ORA11GR2 > with temp as (
2 select a, a2 from a
3 union all
4 select a , null a2 from a
5 union all
6 select null a , a2 from a
7 union all
8 select null a , null a2 from a
9 )
10 select * from temp group by a, a2 order by a2 desc;
A A2
---------- ----------
1
2
3
4
5
6
7
8
4 5
5 5
A A2
---------- ----------
6 5
7 5
8 5
5
1 4
2 4
3 4
4
19 rows selected.
使用cube分組擴充結果:
HR@ORA11GR2 > select a, a2 from a group by cube(a, a2) order by a2 desc;
A A2
---------- ----------
1
2
3
4
5
6
7
8
4 5
5 5
A A2
---------- ----------
6 5
7 5
8 5
5
1 4
2 4
3 4
4
19 rows selected.
從上面的輸出中,我們會發現cube會將許多的null值,如果cube()裡指定的列本身就具有null值,又需要如何區分呢?
解決方法為透過grouping()函式來排除null值,例如grouping(a)來檢測A表中a列是否有一行null值是由cube產生的,如果有,則返回1,其他所有情況,則返回0.
接著再結合decode()函式或case表示式,來將cube()產生的null值轉化成通俗易懂的字串。
實驗如下:
HR@ORA11GR2 > select decode(grouping(a),1,'cube_value',a) a , decode(grouping(a2), 1, 'cube_value',a2) a2 from a group by cube(a, a2) order by a2 desc;
A A2
---------------------------------------- ----------------------------------------
cube_value cube_value
4 cube_value
8 cube_value
7 cube_value
6 cube_value
5 cube_value
3 cube_value
2 cube_value
1 cube_value
cube_value 5
6 5
A A2
---------------------------------------- ----------------------------------------
8 5
7 5
4 5
5 5
1 4
cube_value 4
3 4
2 4
19 rows selected.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1720037/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 擴充套件Oracle套件
- c# 高階應用 理解擴充套件方法C#套件
- group by分組查詢
- 【譯】提高 JavaScript 開發效率的高階 VSCode 擴充套件!JavaScriptVSCode套件
- 分類與擴充
- 分類擴充套件套件
- Oracle OCP(12):ROLLUP & CUBEOracle
- HarmonyOS Next 使用者認證的高階應用與擴充
- oracle 高階函式Oracle函式
- 【IDL】 DICOM擴充套件模組套件
- Android:ListView的擴充與進階AndroidView
- 「Oracle」Oracle高階查詢介紹Oracle
- Android開發 - 掌握ConstraintLayout(九)分組(Group)AndroidAI
- 數論分塊擴充套件套件
- 使用udev擴充套件ASM磁碟組dev套件ASM
- centos安裝php的oracle擴充套件CentOSPHPOracle套件
- Python模組高階技巧Python
- 【模組三】Python高階Python
- Oracle資料庫壞塊典型案例擴充Oracle資料庫
- SHAREit Group,賦能出海企業有效擴充海外新興市場
- 聚合函式及分組與過濾(GROUP BY … HAVING)函式
- Django筆記十七之group by 分組用法總結Django筆記
- Lexar雷克沙:以創新為高需時代賦能,擴充套件高階專業品質套件
- 茄子科技(海外SHAREit Group),助力出海企業擴充海外新興市場
- Oracle ASM磁碟組擴容(AIX7.1)OracleASMAI
- Kubernetes可擴充套件Admission進入Beta階段套件
- MYSQL學習筆記8: DQL分組查詢(group by)MySql筆記
- iOS開發的分類和擴充套件iOS套件
- 分頁查詢及其擴充應用案例
- 中文分詞 PHP 擴充套件 SCWS 安裝中文分詞PHP套件
- oracle partition by group by,詳解partition by和group by對比Oracle
- 茄子科技(海外SHAREit Group)助力出海企業加速擴充海外新興市場
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Oracle RAC環境下ASM磁碟組擴容OracleASM
- php利用pcntl擴充套件實現高併發PHP套件
- Oracle優化案例-擴充套件統計資訊(十四)Oracle優化套件
- 【PHP】Mcrypt 擴充套件模組安裝及使用PHP套件
- (PHP7核心剖析-11) 模組擴充套件PHP套件
- 15、Oracle中的高階子查詢Oracle