甲骨文 - GROUPING_ID 与分组集
Oracle - GROUPING_ID with GROUPING SETS
我想根据一个例子来验证我的理解,因为这将用于为我的项目构建一个等效的查询。这是引用自 https://oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets#grouping_sets
的例子
SELECT fact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value) AS sales_value,
GROUPING_ID(fact_1_id, fact_2_id, fact_3_id) AS grouping_id
FROM dimension_tab
GROUP BY GROUPING SETS((fact_1_id, fact_2_id), (fact_1_id, fact_3_id))
ORDER BY fact_1_id, fact_2_id, fact_3_id;
根据上面的查询,
我可以说会有两个小计吗,第一个按FACT_1_ID, FACT_2_ID
分组,另一个按FACT_1_ID, FACT_3_ID
分组?
1的GROUPING_ID
指的是group by FACT_1_ID, FACT_2_ID
?而 2 的 GROUPING_ID
指的是按 FACT_1_ID, FACT_3_ID
?
分组
从第 2 点开始继续。由于 1 的 GROUPING_ID
指的是按 FACT_1_ID, FACT_2_ID
分组,因此列 FACT_3_ID
保持原样 NULL
未用作 GROUP BY
子句。
我的理解正确吗?
GROUPING_ID就是用这个公式计算出来的。 BIN_TO_NUM(grouping(fact_1_id),GROUPING(fact_2_id),GROUPING(fact_3_id))
Bin_to_num 将二进制值转换为数字。
可以进行逆向计算。
如果 GROUPING_ID=1 => BIN_TO_NUM(0,0,1) = 1 -> fact_3 = null
如果 GROUPING_ID=2 => BIN_TO_NUM(0,1,0) = 2 ->fact_2 = null
“1”的位置表示分组时哪一列被null替换了。
看得懂吗?
我想根据一个例子来验证我的理解,因为这将用于为我的项目构建一个等效的查询。这是引用自 https://oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets#grouping_sets
的例子SELECT fact_1_id,
fact_2_id,
fact_3_id,
SUM(sales_value) AS sales_value,
GROUPING_ID(fact_1_id, fact_2_id, fact_3_id) AS grouping_id
FROM dimension_tab
GROUP BY GROUPING SETS((fact_1_id, fact_2_id), (fact_1_id, fact_3_id))
ORDER BY fact_1_id, fact_2_id, fact_3_id;
根据上面的查询,
我可以说会有两个小计吗,第一个按
FACT_1_ID, FACT_2_ID
分组,另一个按FACT_1_ID, FACT_3_ID
分组?1的
GROUPING_ID
指的是group byFACT_1_ID, FACT_2_ID
?而 2 的GROUPING_ID
指的是按FACT_1_ID, FACT_3_ID
? 分组
从第 2 点开始继续。由于 1 的
GROUPING_ID
指的是按FACT_1_ID, FACT_2_ID
分组,因此列FACT_3_ID
保持原样NULL
未用作GROUP BY
子句。
我的理解正确吗?
GROUPING_ID就是用这个公式计算出来的。 BIN_TO_NUM(grouping(fact_1_id),GROUPING(fact_2_id),GROUPING(fact_3_id))
Bin_to_num 将二进制值转换为数字。
可以进行逆向计算。
如果 GROUPING_ID=1 => BIN_TO_NUM(0,0,1) = 1 -> fact_3 = null
如果 GROUPING_ID=2 => BIN_TO_NUM(0,1,0) = 2 ->fact_2 = null
“1”的位置表示分组时哪一列被null替换了。
看得懂吗?