2012-08-23 16 views
6

どうすればGROUPT_CONCATが返るNULLの列がNULLの場合は返されますか?ここでGROUP_CONCATがNULLの場合は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)非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'です。 –

関連する問題