• oracle:cube,rollup


    以下数据出于《Oracle.10g.Pl.SQL编程》

    CUBE ROLLUP 是用于统计数据的

    通常只用 GRUOP BY得到的数据如下

    SELECT deptno,job, avg(sal)
    FROM table_name
    GROUP BY (deptno, job);

    加上 ROLLUP

    如果用 CUBE

    注意不同,第二个表多了每行的平均数,还有全部数据的平均数

    第3个表在第二个表上多了每列的平均数

    下面介绍这两个函数:

    ROLLUP

    为每个分组返回一条小计记录,并为全部分组返回总计

    SELECT deptno,job, avg(sal)
    FROM table_name
    GROUP BY ROLLUP(deptno, job);

    CUBE

    返回所有列组合的小计信息,同时在最后显示总计信息

    SELECT deptno,job, avg(sal)
    FROM table_name
    GROUP BY CUBE(deptno, job);

     

    GROUPING(column_name) 

    对输入列返回0或1,如果该行数据使用了数据的列中的信息,则输出0,没有用到则输出1

    或者这么理解,对于该行得出的统计数据,需要从 输入列中选择数据的话,输出0,不需要选择数据的就输出1

    eg:

    求部门1 职位j  的平均工资,对于输入 GRUOPING(deptno)和 GROUPING(job) 来说,都为0

    如果只是统计部门1的平均工资对于输入 GRUOPING(deptno)和 GROUPING(job) 来说,前0后1

    如果统计全部部门全部职位一起的平均工资,两者都为1


    GROUPING SETS(column_name) 

    只返回统计信息,就是上图中 提出两个 GROUPING 都为0的情况,两者为1的那个也剔除。

    SELECT deptno,job, avg(sal)
    FROM table_name
    GROUP BY GROUPING SETS(deptno, job);

    GROUPING_ID(column_name1,column_name2…)

    这个返回一个整数,最小为0,这个整数怎么确定,将上面的输入的列,分配以bit,column_name1 的在column_name2的左边,

    这样就形成了一个二进制数,将它转为10进制就是获得的数了,

    怎么确定每位的0和1?

    每位的值,和 GROUPING(column_name)的值是一样的,

    例如上面的GROUPING(column_name1) GROUPING(column_name2) 为1 和0

    则获得的值为 0b10 ,即2.

  • 相关阅读:
    定时器
    按键中断部分的理解
    初中数学
    WING IDE 快捷键
    机器学习各种网址
    SQL With As 用法Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
    Python编码格式导致的csv读取错误
    Oracle中的rownum 和rowid的用法和区别
    oracle配置
    matplotlib命令与格式:标题(title),标注(annotate),文字说明(text)
  • 原文地址:https://www.cnblogs.com/Azhu/p/2455379.html
Copyright © 2020-2023  润新知