我想基于一个示例验证我的理解,因为这将用于为我的项目构造一个等效的查询。这是引自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
是指FACT_1_ID, FACT_2_ID
分组?而GROUPING_ID
for 2指的是FACT_1_ID, FACT_3_ID
组
从第2点开始继续。由于1 {1}}引用GROUPING_ID
分组,因此FACT_1_ID, FACT_2_ID
列仍为FACT_3_ID
不被用作NULL
条款。
我的理解是否正确?
答案 0 :(得分:2)
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
这可以理解吗?