2012-08-23 6 views
6

Wie kann ich GROUPT_CONCAT zurückgeben NULL, wenn eine Spalte NULL ist?GROUP_CONCAT gibt NULL zurück, wenn irgendein Wert NULL ist

Hier ist eine Testtabelle:

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

Und meine Frage:

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

Dies ist, was ich bekommen:

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

Dies ist, was ich will:

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

+1 für die Bereitstellung von Testdaten. –

Antwort

5

In einem IF Ausdruck überprüfen, ob ein Wert in der Gruppe NULL ist. Ich kann von Möglichkeiten, von ein paar denken, dies zu tun:

1) Zählen Sie die Nicht-Null-Werte und vergleichen Sie es mit der Anzahl der Zeilen in der Gruppe:

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

anzeigen online arbeiten: sqlfiddle

2) die Anzahl der Nullwerte mit SUM:

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

anzeigen online arbeiten: sqlfiddle

+0

Cool thanks :) Ich habe das Gefühl, dass dies auf einem großen Datensatz schrecklich funktioniert. – Petah

+0

Haben Sie Ihr Update gesehen, wissen Sie, welches besser funktioniert? – Petah

+0

@Petah: Ich müsste es sicher messen. Bei einer Schätzung könnte die Sekunde ein bisschen schneller sein, aber ich vermute, dass beide eine angemessene Leistung haben werden. Der teure Teil ist wahrscheinlich der 'GROUP_CONCAT'. –