programing

MySQL/MariaDB에서 롤업 null로 그룹을 식별하는 방법은?

css3 2023. 9. 7. 21:56

MySQL/MariaDB에서 롤업 null로 그룹을 식별하는 방법은?

수퍼 애그리게이트 행의 모든 값의 집합을 나타내는 널과 정규 행의 널을 구별하려면 어떻게 해야 합니까?

예를 들어, 오라클에서는 그룹핑 기능을 사용할 수 있습니다.

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'

그러나 이 쿼리는 그룹화 null을 식별하지 못합니다.

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'

두 번째 쿼리가 작동하지 않는 이유는 무엇이며 모든 경우에 작동하는 솔루션은 무엇입니까?

업데이트: 또한 COALESCE를 사용하려고 했지만 단순 NULL만 확인하는 데 도움이 되었지만 GROUP BY ROLUP NULL이 있는 열을 변경해야 합니다.

언급URL : https://stackoverflow.com/questions/47467323/how-to-identify-group-by-with-rollup-null-in-mysql-mariadb