2012-08-23 100 views
6

如果有任何列是NULL,如何使GROUPT_CONCAT返回NULL如果任何值爲NULL,則GROUP_CONCAT返回NULL

下面是測試表:

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'); 

而且我的查詢:

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

這就是我得到:

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

這就是我想要的:

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

+1提供測試數據。 –

回答

5

IF表達式中,檢查組中是否有NULL值。我能想到幾個這樣做的途徑:

1)計數的非空值,並將其與行的組數:

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

看到它聯機工作:sqlfiddle

2)使用SUM計數空值的數量:

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

@Petah:我必須測量它是肯定的。猜測第二個可能會更快一點,但我懷疑這兩者都會有合理的表現。昂貴的部分可能是'GROUP_CONCAT'。 –