GROUPING

简介

GROUPING
GROUPING
函数在
GROUPING SETS
GROUPING SETS
ROLLUP
ROLLUP
CUBE
CUBE
场景中使用,用于区分某一列是"实际分组值"还是"聚合汇总行"。返回
1
1
表示该列在当前行中被聚合(即汇总行中该维度未参与分组),返回
0
0
表示该列是实际的分组值。

通常与

CASE
CASE
结合使用,在报表中将汇总行的
NULL
NULL
替换为"合计"等标签,从而区分真实的
NULL
NULL
分组值和聚合产生的
NULL
NULL

语法

GROUPING(<expr>)

参数

  • expr
    expr
    GROUP BY
    GROUP BY
    子句中出现的列或表达式,必须与
    GROUPING SETS
    GROUPING SETS
    ROLLUP
    ROLLUP
    CUBE
    CUBE
    中引用的维度一致。

返回结果

  • 返回值类型为
    INT
    INT
    0
    0
    1
    1
    )。
  • 返回
    0
    0
    :该维度参与了当前行的分组,列值为真实的分组值。
  • 返回
    1
    1
    :该维度未参与当前行的分组,对应的列值为聚合产生的
    NULL
    NULL
    (即汇总行)。

示例

建表并插入测试数据:

CREATE TABLE doc_sales ( region STRING, category STRING, amount INT ); INSERT INTO doc_sales VALUES ('East', 'Electronics', 100), ('East', 'Clothing', 80), ('West', 'Electronics', 120), ('West', 'Clothing', 60);

使用

GROUPING SETS
GROUPING SETS
查询各维度小计与总计,并用
GROUPING
GROUPING
标记汇总行:

SELECT CASE WHEN GROUPING(region) = 1 THEN '全部地区' ELSE region END AS region, CASE WHEN GROUPING(category) = 1 THEN '全部品类' ELSE category END AS category, SUM(amount) AS total_amount, GROUPING(region) AS g_region, GROUPING(category) AS g_category FROM doc_sales GROUP BY GROUPING SETS ((region, category), (region), (category), ()) ORDER BY g_region, g_category, region, category;

查询结果:

+----------+-------------+--------------+----------+------------+ | region | category | total_amount | g_region | g_category | +----------+-------------+--------------+----------+------------+ | East | Clothing | 80 | 0 | 0 | | East | Electronics | 100 | 0 | 0 | | West | Clothing | 60 | 0 | 0 | | West | Electronics | 120 | 0 | 0 | | East | 全部品类 | 180 | 0 | 1 | | West | 全部品类 | 180 | 0 | 1 | | 全部地区 | Clothing | 140 | 1 | 0 | | 全部地区 | Electronics | 220 | 1 | 0 | | 全部地区 | 全部品类 | 360 | 1 | 1 | +----------+-------------+--------------+----------+------------+

结果解读:

  • g_region = 0, g_category = 0
    g_region = 0, g_category = 0
    :明细行,region 和 category 均为真实分组值。
  • g_region = 0, g_category = 1
    g_region = 0, g_category = 1
    :按地区汇总行,category 维度被聚合,显示为"全部品类"。
  • g_region = 1, g_category = 0
    g_region = 1, g_category = 0
    :按品类汇总行,region 维度被聚合,显示为"全部地区"。
  • g_region = 1, g_category = 1
    g_region = 1, g_category = 1
    :总计行,两个维度均被聚合,对应
    GROUPING SETS
    GROUPING SETS
    中的空集
    ()
    ()
联系我们
预约咨询
微信咨询
电话咨询
邮件咨询