web-dev-qa-db-fra.com

Fonction d'agrégation dans MySQL - list (comme LISTAGG dans Oracle)

J'ai besoin d'une fonction, qui retourne une liste de chaînes.

J'ai des données dans la table comme ceci:

Id    MyString
------------------------
 1    First
 2    Second
 3    Third
 4    Fourth

J'ai besoin de fonctionner comme ceci (quelque chose comme ça marche dans Oracle):

select LISTAGG(MyString, ', ') as myList where id < 4

Cela retourne quelque chose comme ceci:

myList
------------------------
First, Second, Third

Des idées?

20
Kamil

Vous recherchez GROUP_CONCAT ()

Essaye ça:

select group_concat(MyString separator ', ') as myList from table
where id < 4

Bien sûr, vous pouvez group by les résultats.

35
Mosty Mostacho

Depuis MySQL 5.7.22, vous pouvez également utiliser deux fonctions d'agrégation JSON: JSON_ARRAYAGG ou JSON_OBJECTAGG . Vous pouvez les combiner avec les fonctions JSON de MySQL pour obtenir des résultats agrégés au format JSON. Contrairement à GROUP_CONCAT, il n'y a pas de paramètre de configuration MySQL qui limiterait la taille de la valeur renvoyée, autre que max_allowed_packet (qui affecte toutes les requêtes).

1
alumarcu