2012-08-23 3 views
6

Come posso rendere GROUPT_CONCAT restituire NULL se una colonna è NULL?GROUP_CONCAT restituisce NULL se qualsiasi valore è NULL

Ecco una tabella di test:

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

E la mia domanda:

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

Questo è ciò che ottengo:

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

Questo è quello che voglio:

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

+1 per fornire dati di test. –

risposta

5

In un controllo di espressione IF se un valore è NULL nel gruppo. Mi vengono in mente un paio di modi per farlo:

1) contare i valori non nulli e confrontarlo con il numero di righe nel gruppo:

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

vederlo lavorare on-line: sqlfiddle

2) Contare il numero di valori nulli utilizzando SUM:

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

vederlo lavorare on-line: sqlfiddle

+0

Grazie fantastici :) Ho la sensazione che questo si comporterà terribilmente su un grande set di dati però. – Petah

+0

Hai appena visto il tuo aggiornamento, sai qual è il rendimento migliore? – Petah

+0

@Petah: dovrei misurarlo per essere sicuro. A occhio e croce, il secondo potrebbe essere un po 'più veloce, ma sospetto che entrambi avranno prestazioni ragionevoli. La parte costosa è probabile che sia la "GROUP_CONCAT". –