distinct剔除重复行,而不是按重复分组级别剔除;而group_id是按重复分组级别剔除。在扩展分组中,使用distinct有时结果可能不对,
而group_id是oracle专门用来剔除重复分组结果的。
SQL> with t as
2 (select 1 s, 'a' name
3 from dual
4 union all
5 select 1 s, null name
6 from dual
7 union all
8 select 2 s, null name
9 from dual
10 union all
11 select 1 s, 'a' name from dual)
12 select s, name, count(1), grouping(name), group_id()
13 from t
14 group by rollup(s, name);
S NAME COUNT(1) GROUPING(NAME) GROUP_ID()
---------- ---- ---------- -------------- ----------
1 1 0 0
1 a 2 0 0
1 3 1 0
2 1 0 0
2 1 1 0
4 1 0
6 rows selected
group_id均为0说明没有重复分组,如果用distinct,那么就算将不应该剔除的数据剔除。
[@more@]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24496749/viewspace-1052244/
,如需转载,请注明出处,否则将追究法律责任。