2012-08-23 34 views
6

NULLNULL, herhangi bir sütun NULL dönerse nasıl yapabilirim? Bu Benim istediğimGROUP_CONCAT NULL varsa, herhangi bir değer NULL

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

:

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

Bu bana seni mi:

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

Ve sorgusu: Burada

bir test tablodur

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

+1. –

cevap

5

Bir IF ifadesinde, grupta herhangi bir değerin NULL olup olmadığını kontrol edin.

1) boş olmayan değerler sayın ve gruptaki satır sayısıyla karşılaştırabilirsiniz:

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

çevrimiçi çalışır duruma bakınız: Bunu yapmanın yollarından bir çift düşünebilirsiniz sqlfiddle

2) SUM kullanarak boş değer sayısını sayısı:

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

çevrimiçi çalışır duruma bakınız: sqlfiddle

012 Test verisi sağlamak için
+0

Harika teşekkürler :) Bunun büyük bir veri setinde korkunç bir performans göstereceğini hissediyorum. – Petah

+0

Sadece güncellemenizi gördünüz, hangisinin daha iyi performans göstereceğini biliyor musunuz? – Petah

+0

@Petah: Emin olmak için onu ölçmek zorundayım. Tahmin edersek, ikinci biraz daha hızlı olabilir, ama her ikisinin de makul bir performans göstereceğinden şüpheleniyorum. Pahalı kısım muhtemelen 'GROUP_CONCAT' olacaktır. –

İlgili konular