Jak używać GROUP BY do łączenia łańcuchów w MySQL?
W zasadzie pytanie brzmi jak się z tego wydostać:
foo_id foo_name 1 A 1 B 2 C
Do tego:
foo_id foo_name 1 A B 2 C
6 answers
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
Https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat
Z powyższego linku, GROUP_CONCAT
: funkcja zwraca wynik Łańcuchowy ze skonkatenowanymi wartościami innymi niż NULL z grupy. Zwraca NULL, jeśli nie ma wartości innych niż NULL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-29 00:38:07
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id
Więcej Szczegółów TUTAJ .
Z powyższego linku, GROUP_CONCAT
: funkcja zwraca wynik Łańcuchowy ze skonkatenowanymi wartościami innymi niż NULL z grupy. Zwraca NULL, jeśli nie ma wartości innych niż NULL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-07 15:50:40
SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id
Da ci znak rozdzielany przecinkami
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-29 07:58:38
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
:- W MySQL można uzyskać skonkatenowane wartości kombinacji wyrażeń . Aby wyeliminować zduplikowane wartości, użyj klauzuli DISTINCT . Aby sortować wartości w wyniku, użyj klauzuli ORDER BY. Aby sortować w odwrotnej kolejności , dodaj DESC (malejąco) słowo kluczowe do nazwy sortowanej kolumny w klauzuli ORDER BY. Domyślną wartością jest kolejność rosnąca; może być ona określona jawnie za pomocą słowa kluczowego ASC. Domyślny separator między wartościami w grupie jest przecinek (","). Aby jawnie określić separator, użyj separatora, po którym następuje literalna wartość łańcuchowa, która powinna być wstawiona pomiędzy wartościami grupy. Aby całkowicie wyeliminować separator, należy podać SEPARATOR " .
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
Lub
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-29 07:58:52
Wynik jest obcięty do maksymalnej długości określonej przez zmienną systemową group_concat_max_len, która ma domyślną wartość 1024 znaków, więc najpierw robimy:
SET group_concat_max_len=100000000;
I wtedy, na przykład:
SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-04 11:19:44
Świetne odpowiedzi. Miałem również problem z NULL i udało mi się go rozwiązać poprzez włączenie KOALESCE wewnątrz GROUP_CONCAT. Przykład w następujący sposób:
SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ')
FROM table
GROUP BY id;
Hope this helps someone else
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-29 07:58:19