如何区分表示superaggregate行中所有值的集合的null和常规行中的null?
例如在Oracle中,我可以使用GROUPING函数。
在MariaDB中,我尝试使用以下内容:
if(<some_column> is null and count(1)>1,1,0)
但它并不适用于所有情况。
例如tab_a table:
create table tab_a (col1 integer, col2 integer);
insert into tab_a values (5,1), (10,2), (15,null);
下一个查询正确地确定了分组null:
select sum(col1), col2,
if(col2 is null and count(1)>1,'grouping null','not grouping null'),
count(1) from tab_a group by col2 with rollup
结果:
'15', NULL, 'not grouping null', '1'
'5', '1', 'not grouping null', '1'
'10', '2', 'not grouping null', '1'
'30', NULL, 'grouping null', '3'
但是这个查询并没有识别分组为空:
select sum(col1), round(col2),
if(round(col2) is null and count(1)>1,'grouping null','not grouping null'),
count(1) from tab_a group by round(col2) with rollup
结果:
'15', NULL, 'not grouping null', '1'
'5', '1', 'not grouping null', '1'
'10', '2', 'not grouping null', '1'
'30', NULL, 'not grouping null', '3'
为什么第二个查询不起作用,什么是适用于所有情况的解决方案?
UPDATE:我也尝试使用COALESCE,但它只能确定简单的null,但我需要更改GROUP BY ROLLUP NULL所在的列。