暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SUM、CUBE、ROLLUP、GROPING的基本区别和使用

萨瓦迪卡 2025-03-13
279
  1. ROLLUP

    • 功能:生成层次化的小计和总计(逐级向上汇总)。
      • 例如,按 GROUP BY ROLLUP(a, b) 分组,会生成以下结果:
        • (a, b) 的明细
        • (a) 的小计
        • 全局总计。
    • 适用场景:需要按层级汇总(如部门→员工→总计)时使用。
  2. CUBE

    • 功能:生成所有可能的组合小计和总计(多维交叉汇总)。
      • 例如,按 GROUP BY CUBE(a, b) 分组,会生成以下结果:
        • (a, b) 的明细
        • (a) 的小计
        • (b) 的小计
        • 全局总计。
    • 适用场景:需要多维度的全组合汇总(如部门、地区、产品的交叉统计)。

    • 示例
    • -- 使用 ROLLUP 生成层次化汇总
      SELECT department, job, SUM(salary)
      FROM employees
      GROUP BY ROLLUP(department, job);

      -- 使用 CUBE 生成全组合汇总
      SELECT department, job, SUM(salary)
      FROM employees
      GROUP BY CUBE(department, job);

  3. SUM函数
    • 1. 基础用法

      • 作用:计算指定列的总和,通常与 GROUP BY 一起使用。
      • 语法

        SELECT SUM(column_name) FROM table_name [GROUP BY group_column];

      • 示例

        -- 按部门统计销售额总和 SELECT department, SUM(sales) AS total_sales FROM sales_data GROUP BY department;

        输出
        departmenttotal_sales
        HR50000
        IT75000

      2. 处理 NULL 值

      • SUM 会忽略 NULL 值。

        -- 如果某行的 sales 为 NULL,该行不计入总和 SELECT SUM(sales) FROM sales_data;

      4、GROUPING

       函数

      1. 作用

      • 标识超级聚合行:当使用 ROLLUPCUBE 或 GROUPING SETS 时,GROUPING 用于区分普通聚合行和超级聚合行(如小计、总计)。
      • 返回值
        • 0:表示该列是普通分组的一部分。
        • 1:表示该列是超级聚合行的一部分(如小计或总计)。

      2. 语法

      SELECT GROUPING(column_name) AS is_aggregated, [其他列], SUM(value_column) AS total FROM table_name GROUP BY ROLLUP/CUBE/GROUPING SETS (group_columns);

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论