oracle 11g awm cube查不到数据是什么问题

oracle 11g awm cube查不到数据是什么问题,第1张

1先看一下ROLLUP的数据统计效果

1)创建测试表group_test

SECOOLER@ora11g> create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int);

Table created

2)初始化数据

insert into group_test values (10,'Coding', 'Bruce',1000);

insert into group_test values (10,'Programmer','Clair',1000);

insert into group_test values (10,'Architect', 'Gideon',1000);

insert into group_test values (10,'Director', 'Hill',1000);

insert into group_test values (20,'Coding', 'Jason',2000);

insert into group_test values (20,'Programmer','Joey',2000);

insert into group_test values (20,'Architect', 'Martin',2000);

insert into group_test values (20,'Director', 'Michael',2000);

insert into group_test values (30,'Coding', 'Rebecca',3000);

insert into group_test values (30,'Programmer','Rex',3000);

insert into group_test values (30,'Architect', 'Richard',3000);

insert into group_test values (30,'Director', 'Sabrina',3000);

insert into group_test values (40,'Coding', 'Samuel',4000);

insert into group_test values (40,'Programmer','Susy',4000);

insert into group_test values (40,'Architect', 'Tina',4000);

insert into group_test values (40,'Director', 'Wendy',4000);

commit;

3)初始化之后的数据情况如下:

SECOOLER@ora11g> set pages 100

SECOOLER@ora11g> select from group_test;

GROUP_ID JOB NAME SALARY

---------- ---------- ---------- ----------

10 Coding Bruce 1000

10 Programmer Clair 1000

10 Architect Gideon 1000

10 Director Hill 1000

20 Coding Jason 2000

20 Programmer Joey 2000

20 Architect Martin 2000

20 Director Michael 2000

30 Coding Rebecca 3000

30 Programmer Rex 3000

30 Architect Richard 3000

30 Director Sabrina 3000

40 Coding Samuel 4000

40 Programmer Susy 4000

40 Architect Tina 4000

40 Director Wendy 4000

16 rows selected

4)ROLLUP的数据统计效果

sec@ora10g> select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by rollup(group_id, job);

GROUP_ID JOB GROUPING(GROUP_ID) GROUPING(JOB) SUM(SALARY)

---------- ---------- ------------------ ------------- -----------

10 Coding 0 0 1000

10 Director 0 0 1000

10 Architect 0 0 1000

10 Programmer 0 0 1000

10 0 1 4000

20 Coding 0 0 2000

20 Director 0 0 2000

20 Architect 0 0 2000

20 Programmer 0 0 2000

20 0 1 8000

30 Coding 0 0 3000

30 Director 0 0 3000

30 Architect 0 0 3000

30 Programmer 0 0 3000

30 0 1 12000

40 Coding 0 0 4000

40 Director 0 0 4000

40 Architect 0 0 4000

40 Programmer 0 0 4000

40 0 1 16000

1 1 40000

21 rows selected

2进一步体验CUBE的魅力

sec@ora10g> select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by cube(group_id, job) order by 1;

GROUP_ID JOB GROUPING(GROUP_ID) GROUPING(JOB) SUM(SALARY)

---------- ---------- ------------------ ------------- -----------

10 Architect 0 0 1000

10 Coding 0 0 1000

10 Director 0 0 1000

10 Programmer 0 0 1000

10 0 1 4000

20 Architect 0 0 2000

20 Coding 0 0 2000

20 Director 0 0 2000

20 Programmer 0 0 2000

20 0 1 8000

30 Architect 0 0 3000

30 Coding 0 0 3000

30 Director 0 0 3000

30 Programmer 0 0 3000

30 0 1 12000

40 Architect 0 0 4000

40 Coding 0 0 4000

40 Director 0 0 4000

40 Programmer 0 0 4000

40 0 1 16000

Architect 1 0 10000

Coding 1 0 10000

Director 1 0 10000

Programmer 1 0 10000

1 1 40000

25 rows selected

解释如上结果中GROUPING函数返回值“0”和“1”的含义。

如果显示“1”表示CUBE函数对应的列(例如JOB字段)是由于CUBE函数所产生的空值对应的信息,即对此列进行汇总计算后的结果。

如果显示“0”表示此行对应的这列参未与ROLLUP函数分组汇总活动。

如果还是没有理解清楚,请参见Oracle官方文档中的描述内容:“Using a single column as its argument,GROUPINGreturns 1 when it encounters aNULLvalue created by aROLLUPorCUBEoperation That is, if theNULLindicates the row is a subtotal,GROUPINGreturns a 1 Any other type of value, including a storedNULL, returns a 0”

3仔细观察一下,CUBE与ROLLUP之间的细微差别

rollup(a,b) 统计列包含:(a,b)、(a)、()

rollup(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a)、()

……以此类推ing……

cube(a,b) 统计列包含:(a,b)、(a)、(b)、()

cube(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

……以此类推ing……

So,上面例子中CUBE的结果比ROLLUP多了下面关于第一列GROUP_ID的统计信息:

Architect 1 0 10000

Coding 1 0 10000

Director 1 0 10000

4小结

CUBE在ROLLUP的基础上进一步从各种维度上给出细化的统计汇总结果。

CUBE与GROUP BY的关系可以参考Oracle官方文档中的例子,链接如下:,链接如下:《CUBE Extension to GROUP BY》>

分析:cube函数中的v只是一个临时变量,不是类的成员因此函数运行后消除,导致print函数无法获取v的值,因此主函数中输出错误!

第一种:直接输出

主函数中直接输出cout<<"v="<<op1cube();即可

第二种:将v设为类A的私有成员变量,主程序不用修改!

第三种:修改print()函数,cout<<"v="<<thiscube();即可

以上就是关于oracle 11g awm cube查不到数据是什么问题全部的内容,包括:oracle 11g awm cube查不到数据是什么问题、mysql 已经升级到8.0.15了,为什么使用group by加cube函数还是出错、#include<iostream>等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9870496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存