oracle group by 兩項,Oracle中group by 的擴展函數rollup、cube、grouping sets

Oracle的group by除了基本使用方法以外,還有3種擴展使用方法,各自是rollup、cube、grouping sets。分別介紹例如以下:

1、rollup

對數據庫表emp。如果當中兩個字段名為a,b,c。

假設使用group by rollup(a,b),首先會對(a,b)進行group by ,然后對 a 進行 group by 。最后對全表進行 group by 操作。

例如以下查詢結果:

df2fafc3cc07295e54775c786cc71036.png

查詢語句

Select deptno,job,sum(sal) from?emp group by rollup(deptno,job);

等同于

Select deptno,job,sum(sal) from emp group by deptno,job

union all

Select deptno,null sum(sal) from emp group by deptno

union all

Select null,null,sum(sal) from emp (group by null )

2、cube

假設使用group by cube(a,b),,則首先會對(a,b)進行group by,然后依次是(a),(b),最后對全表進行group by 操作,一共是2^2=4次grouping

例如以下查詢結果。

79fd44765dfa75efbd239efce45e61ee.png

查詢語句

Select deptno,job,sum(sal) from emp group by cube(deptno,job);

等同于

Select deptno,job,sum(sal) from emp group by deptno,job

union all

Select deptno,null sum(sal) from emp group by deptno

union all

Select null,job, sum(sal) from emp group by job

union all

Select null,null,sum(sal) from emp (group by null )

3、grouping sets

grouping sets就是對參數中的每一個參數做grouping。假設使用group by grouping sets(a,b)。則對(a),(b)進行group by

例如以下查詢結果:

3137651790a8b1962afb0b9d71ac5734.png

查詢語句

Select deptno,job,sum(sal) from emp group by cube(deptno,job);

等同于

select null,job,sum(sal) from emp group by job

union all

select deptno,null,sum(sal) from emp group by deptno

4、grouping

使用grouping能夠推斷該行是數據庫中本來的行,還是有統計產生的行。grouping值為0時說明這個值是數據庫中本來的值。為1說明是統計的結果,參數僅僅有一個,并且必須為group by中出現的某一列

例如以下查詢結果:

9f8761d8d301a5811f25c29a29afd662.png

查詢語句

select deptno,job,sum(sal),grouping(deptno) a,grouping(job) b?from emp group by rollup(deptno,job);

5、grouping_id

Grouping_id()的返回值事實上就是參數中的每列的grouping()值的二進制向量。假設grouping(a)=1,grouping(b)=1,則grouping_id(A,B)的返回值就是二進制的11。轉成10進制就是3。

參數能夠是多個,但必須為group by中出現的列。

查詢結果例如以下:

eca7a289ad9c3e0515963807388d75db.png

查詢語句

select deptno,job,sum(sal),grouping(deptno) a,grouping(job) b,grouping_id(deptno,job) from emp group by rollup(deptno,job);

6、group_id

GROUP_ID()唯一標識反復組,能夠通過group_id去除反復組

查詢結果例如以下:

4d96319be1cc1089f93493465469ee5a.png

查詢語句

select deptno,job,sum(sal),group_id() from emp group by?deptno,?rollup(deptno,job) having group_id()=0;

Oracle中group by 的擴展函數rollup、cube、grouping sets

標簽:net???rollup???oracle???jsb???from???產生???基本使用???log???font

本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴 本文系統來源:http://www.cnblogs.com/yxysuanfa/p/6830388.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393906.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393906.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393906.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode1079. 活字印刷(回溯)

你有一套活字字模 tiles,其中每個字模上都刻有一個字母 tiles[i]。返回你可以印出的非空字母序列的數目。 注意:本題中,每個活字字模只能使用一次。 示例 1: 輸入:“AAB” 輸出:8 解釋:可能的…

什么從什么寫短句_從什么到從什么造句

從什么到從什么造句從什么到從什么怎么來造句呢?以下是小編為大家收集整理的從什么到從什么造句,希望對你有所幫助!從什么到從什么造句:從聞到花香到看到花朵,從看到花朵到觸摸到花瓣,真是一種美妙的感覺.從今天到明天,從明天到后…

如何開發一個hexo主題_如何確定一個強烈的主題可以使產品開發更有效

如何開發一個hexo主題by Cameron Jenkinson卡梅倫詹金森(Cameron Jenkinson) 如何確定一個強烈的主題可以使產品開發更有效 (How identifying a strong theme can make product development more effective) MVPs always seem easy to execute and build. The first version i…

機器學習基石13-Hazard of Overfitting

注: 文章中所有的圖片均來自臺灣大學林軒田《機器學習基石》課程。 筆記原作者:紅色石頭 微信公眾號:AI有道 上節課主要介紹了非線性分類模型,通過非線性變換,將非線性模型映射到另一個空間,轉換為線性模型…

容器為何物,為什么它對OpenStack很重要?

本文講的是容器為何物,為什么它對OpenStack很重要,【編者的話】本文主要介紹了容器的發展、容器技術、容器類型、Docker、Open Container Initiative、微服務以及OpenStack中容器的應用。 容器現在正經歷著一次重生,部分原因是由于云計算的發…

oracle執行計劃的rows不對,Oracle執行計劃——all_rows和first_rows(n)優化器模式

Oracle執行計劃——all_rows和first_rows(n)優化器模式0. 環境創建[sql]SQL> create usertest identified by test2 default tablespace users3 temporary tablespace temp4 quota unlimited on users;User created.SQL> grant createsession, resource, alter session t…

從 MVC 到前后端分離

轉載自:https://my.oschina.net/huangyong/blog/521891 從MVC到前后端分離 1.理解 MVC MVC是一種經典的設計模式,全名為Model-View-Controller,即模型-視圖-控制器。其中,模型是用于封裝數據的載體,例如,在…

leetcode93. 復原IP地址(回溯)

給定一個只包含數字的字符串,復原它并返回所有可能的 IP 地址格式。 有效的 IP 地址正好由四個整數(每個整數位于 0 到 255 之間組成),整數之間用 ‘.’ 分隔。 示例: 輸入: “25525511135” 輸出: [“255.255.11.135”, “255…

vj節點_創意編碼—如何在JavaScript中創建VJ引擎

vj節點by George Gally通過喬治加利 創意編碼—如何在JavaScript中創建VJ引擎 (Creative Coding — How to create a VJ engine in JavaScript) 了解如何將JavaScript動態注入網頁 (Learn how to dynamically inject JavaScript into webpages) For years I’ve been using th…

上傳下載

# 默寫 TCP UDP 文件夾中的代碼# 完成一個上傳和下載文件的小程序 # server端 :根據客戶端需求自定義 # client端 # 客戶端啟動之后 # 選擇 上傳操作 還是 下載操作 # 如果是上傳操作 : 輸入要上傳的文件路徑 # 基礎需求 :直接將文件上傳到默認目錄 # 進階需求 :將…

qt 串口 環形緩存_qt?linux串口?緩沖區多大

滿意答案Zc的愛丶很美2016.09.11采納率:51% 等級:9已幫助:515人一、程序設計的基礎,例如:基本的編程語言基礎,至少對數據類型、程序的結構及流程控制等最基本的內容要相當清楚!另外有不少同學…

在.NET中使用SMTP發送郵件

這是一篇轉載,可能對大家很有用啊,放首頁看看是否有參考價值。本文提到的方案仍然不能算是完全解決所有問題,最佳的dotNET下通過SMTP(帶驗證)發送郵件的機制是什么,不知道大家有什么好的看法! …

oracle堆,oracle被一堆insert和update堵死解決方案

當前位置:我的異常網 Oracle技術 oracle被一堆insert和update堵死解決方案oracle被一堆insert和update堵死解決方案www.myexceptions.net 網友分享于:2014-07-22 瀏覽:0次oracle被一堆insert和update堵死在生產環境下,幾乎每天都會發生一次…

leetcode306. 累加數(回溯)

累加數是一個字符串,組成它的數字可以形成累加序列。 一個有效的累加序列必須至少包含 3 個數。除了最開始的兩個數以外,字符串中的其他數都等于它之前兩個數相加的和。 給定一個只包含數字 ‘0’-‘9’ 的字符串,編寫一個算法來判斷給定輸…

使用Typescript和React的最佳實踐

by Christopher Diggins克里斯托弗迪金斯(Christopher Diggins) 使用Typescript和React的最佳實踐 (Best practices for using Typescript with React) There are numerous tools and tutorials to help developers start writing simple React applications with TypeScript.…

LeetCode || Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路1:最傻瓜的方法是首先遍歷一次建立next關系的新list。然后第二次遍歷處理random關系…

oracle存儲過程多分支怎樣寫,如何從存儲過程返回多行? (Oracle PL / SQL)

如何從存儲過程返回多行? (Oracle PL / SQL)我想用一個參數創建一個存儲過程,該存儲過程將根據參數返回不同的記錄集。 這是怎么做的? 我可以從普通SQL中調用它嗎?5個解決方案65 votes這是如何構建一個函數,該函數返回…

京東布局消費物聯網 聚合產業鏈共建生態

據Gartner發布的數據顯示,到2020年,全球聯網設備數量將達260億臺,物聯網市場規模將達1.9萬億美元。如今,互聯網已經從人與人的連接發展到人與物、物與物的連接,物聯網時代帶來。 5月9日,京東聚合三大運營商…

xshell監聽端口_監聽端口修改_笨辦法學Linux 遠程訪問 (原理、實踐、記錄與排錯)-視頻課程_Linux視頻-51CTO學院...

聰明人下笨功夫。本課程所倡導“笨辦法”的核心是:● 深入理解原理● 精讀man幫助、官方文檔…● 做所有的實驗,盡量不要復制粘貼!● 詳細記錄實驗過程● 使用思維導圖等輔助工具● 享受排錯的過程,在尋求幫助之前先嘗試自己解決本…

leetcode632. 最小區間(堆+多指針)

你有 k 個升序排列的整數數組。找到一個最小區間&#xff0c;使得 k 個列表中的每個列表至少有一個數包含在其中。 我們定義如果 b-a < d-c 或者在 b-a d-c 時 a < c&#xff0c;則區間 [a,b] 比 [c,d] 小。 示例 1: 輸入:[[4,10,15,24,26], [0,9,12,20], [5,18,22,3…