Come usare GROUP BY per concatenare le stringhe in MySQL?
-
02-07-2019 - |
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
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