Domanda

Fondamentalmente la domanda è come ottenere da questo:

id    string
1          A
1          B
2          C

a questo:

id    string
1          A B
2          C
È stato utile?

Soluzione

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

Dal link sopra, GROUP_CONCAT : questa funzione restituisce un risultato stringa con i valori non NULL concatenati da un gruppo. Restituisce NULL se non ci sono valori non NULL.

Altri suggerimenti

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

Maggiori dettagli qui .

Dal link sopra, GROUP_CONCAT : questa funzione restituisce un risultato stringa con i valori concatenati non NULL di un gruppo. Restituisce NULL se non ci sono valori non NULL.

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

Ti darà una stringa delimitata da virgole

SET group_concat_max_len=100000000
SELECT id, GROUP_CONCAT(string SEPARATOR ' ') FROM table GROUP BY id;

: - In MySQL puoi ottenere i valori concatenati delle combinazioni di espressioni . Per eliminare valori duplicati, utilizzare la clausola DISTINCT . Per ordinare i valori nel risultato, utilizzare la clausola ORDER BY. Per ordinare in ordine inverso , aggiungi la parola chiave DESC (decrescente) al nome della colonna che stai ordinando nella clausola ORDER BY. L'impostazione predefinita è ordine crescente; questo può essere specificato esplicitamente usando la parola chiave ASC. Il separatore predefinito tra i valori in un gruppo è la virgola (& # 8220;, & # 8221;). Per specificare esplicitamente un separatore, utilizzare SEPARATOR seguito dal valore letterale stringa che deve essere inserito tra i valori di gruppo. Per eliminare del tutto il separatore, specifica SEPARATORE '' .

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

o

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

Grandi risposte. Ho anche avuto un problema con NULLS e sono riuscito a risolverlo includendo un COALESCE all'interno di GROUP_CONCAT. Esempio come segue:

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

Spero che questo aiuti qualcun altro

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top