繁体   English   中英

Oracle - GROUPING_ID 与 GROUPING SETS

[英]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;

根据上面的查询,

  1. 我可以说会有两个小计,第一个是按FACT_1_ID, FACT_2_ID ,另一个是按FACT_1_ID, FACT_3_ID吗?

  2. 1 的GROUPING_ID指的是按FACT_1_ID, FACT_2_ID 而 2 的GROUPING_ID指的是按FACT_1_ID, FACT_3_ID

  3. 继续第 2 点。由于GROUPING_ID for 1 指的是 group by 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”的位置表示分组期间哪一列已被空值替换。
可以理解吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM