2012-08-23 3 views
6

어떻게 만들 수 있습니까? GROUPT_CONCAT 반환 NULL 열이 NULL이면? 이것은 내가 원하는 것입니다GROUP_CONCAT는 NULL 값이면 NULL을 반환합니다.

a | GROUP_CONCAT(b) 
--+---------------- 
1 | a,b 
2 | c 
3 | e 

:

SELECT a, GROUP_CONCAT(b) 
FROM gc 
GROUP BY a; 

이 내가 무엇을 얻을 수 있습니다 :

CREATE TABLE gc (
    a INT(11) NOT NULL, 
    b VARCHAR(1) DEFAULT NULL 
); 

INSERT INTO gc (a, b) VALUES 
(1, 'a'), 
(1, 'b'), 
(2, 'c'), 
(2, NULL), 
(3, 'e'); 

그리고 내 쿼리 : 여기

는 테스트 테이블

a | GROUP_CONCAT(b) 
--+---------------- 
1 | a,b 
2 | NULL 
3 | e 
+2

+1 테스트 데이터를 제공합니다. –

답변

5

IF 표현식에서 그룹의 값이 NULL인지 확인하십시오.

1)가 null 이외의 값을 카운트하고 그룹의 행 수에 비교 :

SELECT a, IF(COUNT(b) = COUNT(*), GROUP_CONCAT(b), NULL) AS bs 
FROM gc 
GROUP BY a 

하는 것은 온라인으로 작업을 참조하십시오 : 그 일을 몇 가지 방법을 생각할 수 sqlfiddle

2) SUM를 사용하여 null 값의 수를 계산 :

SELECT a, IF(SUM(b IS NULL) = 0, GROUP_CONCAT(b), NULL) AS bs 
FROM gc 
GROUP BY a 

온라인으로 작업을 참조하십시오 : sqlfiddle

+0

멋진 감사 :) 나는 이것이 대용량 데이터 세트에서 몹시 수행 할 것 같은 느낌이 든다. – Petah

+0

업데이트를 보았는데 어느 것이 더 잘 수행되는지 알고 있습니까? – Petah

+0

@ 페타 : 확실하게 측정해야합니다. 추측에 의하면 초는 조금 더 빨라지 겠지만 두 가지 모두 합리적인 성능을 가질 것으로 생각됩니다. 값 비싼 부분은'GROUP_CONCAT' 일 가능성이 큽니다. –

관련 문제