selectdivision_id,sum(salary)frome" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ORACLE ROLLUP和CUBE的使用

系統(tǒng) 1863 0

原文: http://blog.csdn.net/wh62592855/article/details/4817920

?

?

ROLLUP,是GROUP BY子句的一種擴展,可以為每個分組返回小計記錄以及為所有分組返回總計記錄。

CUBE,也是GROUP BY子句的一種擴展,可以返回每一個列組合的小計記錄,同時在末尾加上總計記錄。

?

在文章的最后附上了相關(guān)表和記錄創(chuàng)建的腳本。

?

1、 向ROLLUP傳遞一列

SQL> select division_id,sum(salary)
? ? from employees2
? ? group by rollup(division_id)
? ? order by division_id;

?

DIV SUM(SALARY)
--- -----------
BUS???? 1610000
OPE???? 1320000
SAL???? 4936000
SUP???? 1015000
??????? 8881000

SQL>

再來看一下如果使用普通的GROUP BY,而沒有ROLLUP是個什么情況

SQL> select division_id,sum(salary)
? ? from employees2
? ? group by division_id
? ? order by division_id;

?

DIV SUM(SALARY)
--- -----------
BUS???? 1610000
OPE???? 1320000
SAL???? 4936000
SUP???? 1015000

可以看到,缺少了最后的統(tǒng)計信息。

?

2、向ROLLUP傳遞多列

SQL> select division_id,job_id,sum(salary)
? ? from employees2
? ? group by rollup(division_id,job_id)
? ? order by division_id,job_id;

?

DIV JOB SUM(SALARY)
--- --- -----------
BUS MGR????? 530000
BUS PRE????? 800000
BUS WOR????? 280000
BUS???????? 1610000
OPE ENG????? 245000
OPE MGR????? 805000
OPE WOR????? 270000
OPE???????? 1320000
SAL MGR???? 4446000
SAL WOR????? 490000
SAL???????? 4936000

DIV JOB SUM(SALARY)
--- --- -----------
SUP MGR????? 465000
SUP TEC????? 115000
SUP WOR????? 435000
SUP???????? 1015000
??????????? 8881000

16 rows selected.

可以看到,除了在最后有一個求和記錄外,每個division_id分組也會有一個求和記錄。

那么我們現(xiàn)在交換一下ROLLUP中數(shù)據(jù)列的順序,看看結(jié)果怎樣

SQL> select job_id,division_id,sum(salary)
? ? from employees2
? ? group by rollup(job_id,division_id)
? ? order by job_id,division_id;

?

JOB DIV SUM(SALARY)
--- --- -----------
ENG OPE????? 245000
ENG????????? 245000
MGR BUS????? 530000
MGR OPE????? 805000
MGR SAL???? 4446000
MGR SUP????? 465000
MGR???????? 6246000
PRE BUS????? 800000
PRE????????? 800000
TEC SUP????? 115000
TEC????????? 115000

JOB DIV SUM(SALARY)
--- --- -----------
WOR BUS????? 280000
WOR OPE????? 270000
WOR SAL????? 490000
WOR SUP????? 435000
WOR???????? 1475000
??????????? 8881000

17 rows selected.

結(jié)果類似,只不過是每一個job_id分組有一個求和記錄罷了。

?

3、向CUBE傳遞一列

SQL> select division_id,sum(salary)
? ? from employees2
? ? group by cube(division_id)
? ? order by division_id;

?

?

DIV SUM(SALARY)
--- -----------
BUS???? 1610000
OPE???? 1320000
SAL???? 4936000
SUP???? 1015000
??????? 8881000

好像和ROLLUP沒什么區(qū)別哦,呵呵,繼續(xù)往下看。

?

4、向CUBE傳遞多列

SQL> select job_id,division_id,sum(salary)
? ? from employees2
? ? group by cube(job_id,division_id)
? ? order by job_id,division_id;

?

JOB DIV SUM(SALARY)
--- --- -----------
ENG OPE????? 245000
ENG????????? 245000
MGR BUS????? 530000
MGR OPE????? 805000
MGR SAL???? 4446000
MGR SUP????? 465000
MGR???????? 6246000
PRE BUS????? 800000
PRE????????? 800000
TEC SUP????? 115000
TEC????????? 115000

JOB DIV SUM(SALARY)
--- --- -----------
WOR BUS????? 280000
WOR OPE????? 270000
WOR SAL????? 490000
WOR SUP????? 435000
WOR???????? 1475000
??? BUS???? 1610000
??? OPE???? 1320000
??? SAL???? 4936000
??? SUP???? 1015000
??????????? 8881000

21 rows selected.

可以看到工資是根據(jù)job_id和division_id求和的,CUBE在每一個job_id中都返回一條記錄,表示其中的工資總數(shù),同時在接近末尾處顯示每一種division_id的工資總數(shù),最后一條記錄顯示所有工資的總數(shù)。

把兩列的順序換換會怎樣?呵呵,真的有興趣那就自己動手試試吧。

?

==================================================================================

CREATE TABLE divisions (
? division_id CHAR(3) CONSTRAINT divisions_pk PRIMARY KEY,
? name VARCHAR2(15) NOT NULL
);

CREATE TABLE jobs (
? job_id CHAR(3) CONSTRAINT jobs_pk PRIMARY KEY,
? name VARCHAR2(20) NOT NULL
);

CREATE TABLE employees2 (
? employee_id INTEGER CONSTRAINT employees2_pk PRIMARY KEY,
? division_id CHAR(3)
??? CONSTRAINT employees2_fk_divisions
??? REFERENCES divisions(division_id),
? job_id CHAR(3) REFERENCES jobs(job_id),
? first_name VARCHAR2(10) NOT NULL,
? last_name VARCHAR2(10) NOT NULL,
? salary NUMBER(6, 0)
);

INSERT INTO divisions (
? division_id, name
) VALUES (
? 'SAL', 'Sales'
);

INSERT INTO divisions (
? division_id, name
) VALUES (
? 'OPE', 'Operations'
);

INSERT INTO divisions (
? division_id, name
) VALUES (
? 'SUP', 'Support'
);

INSERT INTO divisions (
? division_id, name
) VALUES (
? 'BUS', 'Business'
);
INSERT INTO jobs (
? job_id, name
) VALUES (
? 'WOR', 'Worker'
);

INSERT INTO jobs (
? job_id, name
) VALUES (
? 'MGR', 'Manager'
);

INSERT INTO jobs (
? job_id, name
) VALUES (
? 'ENG', 'Engineer'
);

INSERT INTO jobs (
? job_id, name
) VALUES (
? 'TEC', 'Technologist'
);

INSERT INTO jobs (
? job_id, name
) VALUES (
? 'PRE', 'President'
);
INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 1, 'BUS', 'PRE', 'James', 'Smith', 800000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 2, 'SAL', 'MGR', 'Ron', 'Johnson', 350000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 3, 'SAL', 'WOR', 'Fred', 'Hobbs', 140000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 4, 'SUP', 'MGR', 'Susan', 'Jones', 200000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 5, 'SAL', 'WOR', 'Rob', 'Green', 350000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 6, 'SUP', 'WOR', 'Jane', 'Brown', 200000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 7, 'SUP', 'MGR', 'John', 'Grey', 265000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 8, 'SUP', 'WOR', 'Jean', 'Blue', 110000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 9, 'SUP', 'WOR', 'Henry', 'Heyson', 125000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 10, 'OPE', 'MGR', 'Kevin', 'Black', 225000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 11, 'OPE', 'MGR', 'Keith', 'Long', 165000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 12, 'OPE', 'WOR', 'Frank', 'Howard', 125000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 13, 'OPE', 'WOR', 'Doreen', 'Penn', 145000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 14, 'BUS', 'MGR', 'Mark', 'Smith', 155000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 15, 'BUS', 'MGR', 'Jill', 'Jones', 175000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 16, 'OPE', 'ENG', 'Megan', 'Craig', 245000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 17, 'SUP', 'TEC', 'Matthew', 'Brant', 115000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 18, 'OPE', 'MGR', 'Tony', 'Clerke', 200000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 19, 'BUS', 'MGR', 'Tanya', 'Conway', 200000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 20, 'OPE', 'MGR', 'Terry', 'Cliff', 215000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 21, 'SAL', 'MGR', 'Steve', 'Green', 275000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 22, 'SAL', 'MGR', 'Roy', 'Red', 375000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 23, 'SAL', 'MGR', 'Sandra', 'Smith', 335000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 24, 'SAL', 'MGR', 'Gail', 'Silver', 225000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 25, 'SAL', 'MGR', 'Gerald', 'Gold', 245000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 26, 'SAL', 'MGR', 'Eileen', 'Lane', 235000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 27, 'SAL', 'MGR', 'Doreen', 'Upton', 235000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 28, 'SAL', 'MGR', 'Jack', 'Ewing', 235000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 29, 'SAL', 'MGR', 'Paul', 'Owens', 245000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 30, 'SAL', 'MGR', 'Melanie', 'York', 255000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 31, 'SAL', 'MGR', 'Tracy', 'Yellow', 225000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 32, 'SAL', 'MGR', 'Sarah', 'White', 235000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 33, 'SAL', 'MGR', 'Terry', 'Iron', 225000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 34, 'SAL', 'MGR', 'Christine', 'Brown', 247000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 35, 'SAL', 'MGR', 'John', 'Brown', 249000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 36, 'SAL', 'MGR', 'Kelvin', 'Trenton', 255000
);

INSERT INTO employees2 (
? employee_id, division_id, job_id, first_name, last_name, salary
) VALUES (
? 37, 'BUS', 'WOR', 'Damon', 'Jones', 280000
);

?

ORACLE ROLLUP和CUBE的使用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久久免费免费 | 亚洲欧美综合久久 | 日韩精品一区二区在线 | 日韩精品一区在线观看 | 天天操天天擦 | 91在线观看 | www.妞干网.com | 日韩精品亚洲专区在线电影不卡 | 美国黄色一级片 | 国产精品婷婷久久久久 | 欧美日韩视频在线第一区 | 夜夜夜操操操 | 国产亚洲一区二区精品 | 99精品欧美一区 | wwwxxx日本在线观看 | 亚洲精品国产成人 | 黄色影视大全 | 亚洲成人在线网 | 成人嘿嘿视频网站在线 | 亚洲欧美天堂综合久久 | av一区二区三区 | 亚洲天天做日日做天天看2018 | 精品午夜寂寞影院在线观看 | 欧美日韩一区二区视频在线观看 | 人人射人人插 | 日韩在线观看网站 | 国产亚洲精品看片在线观看 | 国产亚洲精品久久久久久小说 | 天天爱夜夜操 | 国产精品999 | 日韩成人在线视频 | 日日摸夜夜添夜夜添破第一 | 国产啪在线91| 精品乱码| 五月婷婷六月丁香 | 91网视频在线观看 | 草草线在成人免费视频 | 欧美黑人疯狂性受xxxxx喷水 | 久久99国产综合精品 | 日韩在线观看视频免费 | 一区二区三区在线播放 |