Maison >base de données >tutoriel mysql >Comment extraire des colonnes spécifiques sous forme de tableau d'objets JSON dans PostgreSQL ?
Extraire des colonnes spécifiques d'une table PostgreSQL sous forme de tableau d'objets JSON
Question :
Vous disposez d'un tableau à plusieurs colonnes et souhaitez renvoyer un tableau d'objets pour chaque ligne, avec deux colonnes regroupées selon une autre colonne. Cependant, vous rencontrerez le problème que le résultat contient une clé supplémentaire dans chaque objet. Le résultat souhaité est un tableau d’objets comportant seulement deux colonnes, regroupés par une troisième colonne.
Solution PostgreSQL 10 :
Pour PostgreSQL 10 et supérieur, vous pouvez utiliser l'opérateur -
pour supprimer une seule clé (ou un tableau de clés dans PostgreSQL 10) d'un objet jsonb
avant l'agrégation.
<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb(t.*) - '{id, val2}'::text[]) AS js_34 FROM tbl t GROUP BY val2;</code>
Solution PostgreSQL 9.4 :
Dans PostgreSQL 9.4 et supérieur, vous pouvez utiliser jsonb_build_object()
ou json_build_object()
pour créer un objet JSON à partir d'une alternance de clés et de valeurs.
<code class="language-sql">SELECT val2, jsonb_agg(jsonb_build_object('val3', val3, 'val4', val4)) AS js_34 FROM tbl GROUP BY val2;</code>
Solution PostgreSQL 9.3 :
Pour PostgreSQL 9.3 et supérieur, vous pouvez utiliser les expressions to_jsonb()
et ROW pour créer des objets JSON. Vous pouvez également utiliser des sous-requêtes au lieu d'expressions ROW.
<code class="language-sql">SELECT val2, jsonb_agg(to_jsonb((val3, val4))) AS js_34 FROM tbl GROUP BY val2; SELECT val2, jsonb_agg(to_jsonb((SELECT t FROM (SELECT val3, val4) t))) AS js_34 FROM tbl GROUP BY val2;</code>
La solution ci-dessus renverra le résultat souhaité : un tableau d'objets avec seulement deux colonnes, regroupés par la troisième colonne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!