web-dev-qa-db-ja.com

MySQLで文字列を連結するためにGROUP BYを使用するにはどうすればいいですか?

基本的に問題はこれからどのように取得するかです。

 id文字列
 1 A 
 1 B 
 2 C 

これに:

 id文字列
 1 A B 
 2 C 
317
Paweł Hajdan
SELECT id, GROUP_CONCAT(string SEPARATOR ' ') FROM table GROUP BY id;

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

上記のリンクから、GROUP_CONCAT:この関数は、グループからの連結されたNULL以外の値を含む文字列結果を返します。 NULL以外の値がない場合はNULLを返します。

472
Scott Noyes
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id

もっと詳しく ここ

上記のリンクから、GROUP_CONCAT:この関数は、グループからの連結されたNULL以外の値を含む文字列結果を返します。 NULL以外の値がない場合はNULLを返します。

159
Graeme Perrow
SELECT id, GROUP_CONCAT(CAST(string as CHAR)) FROM table GROUP BY id

カンマ区切りの文字列を返します

16
Wayne
SET group_concat_max_len=100000000
14
Waqar Alamgir
SELECT id, GROUP_CONCAT(string SEPARATOR ' ') FROM table GROUP BY id;

: - MySQLでは、式の組み合わせの連結値を取得できます。重複値を排除するには、DISTINCT句を使用します。結果の値をソートするには、ORDER BY句を使用してください。 逆順でソートするには、ORDER BYでソートしている列の名前にDESC(降順)キーワードを追加します。句。デフォルトは昇順です。これはASCキーワードを使用して明示的に指定できます。グループ内の値の間のデフォルトの区切り記号はコンマ(“、”)です。区切り文字を明示的に指定するには、SEPARATORに続けてグループ値の間に挿入する文字列リテラル値を使用します。区切り文字を完全に削除するには、SEPARATOR ''を指定します。

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

OR

mysql> SELECT student_name,
    ->     GROUP_CONCAT(DISTINCT test_score
    ->               ORDER BY test_score DESC SEPARATOR ' ')
    ->     FROM student
    ->     GROUP BY student_name;
14
Exundoz

素晴らしい答えです。私はNULLSにも問題があり、GROUP_CONCATの中にCOALESCEを含めることでそれを解決できました。次のような例

SELECT id, GROUP_CONCAT(COALESCE(string,'') SEPARATOR ' ') 
FROM table 
GROUP BY id;

これが他の人に役立つことを願っています

10
Mauricio Alo