如何在MySQL / MariaDB中使用rollup null识别组?

时间:2017-11-24 06:11:50

标签: mysql group-by mariadb rollup

如何区分表示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所在的列。

0 个答案:

没有答案