Combinaison des noms d'acteurs pour chaque film dans une table SQL
Imaginez un tableau avec des colonnes "Film" et "Acteur". La tâche consiste à récupérer une liste de films et de leurs acteurs correspondants, avec tous les acteurs de chaque film combinés en une seule chaîne.
Solution utilisant string_agg()
:
La méthode la plus efficace utilise la fonction string_agg()
(disponible dans PostgreSQL 9.0 et versions ultérieures) :
<code class="language-sql">SELECT movie, string_agg(actor, ', ') AS actor_list FROM table_name GROUP BY movie;</code>
string_agg()
concatène les noms d'acteurs, séparés par des virgules, pour chaque film. GROUP BY movie
assure une rangée par film.
Alternative pour les anciennes versions de PostgreSQL (pré-9.0) :
Pour les anciennes versions de PostgreSQL, utilisez array_agg()
et array_to_string()
:
<code class="language-sql">SELECT movie, array_to_string(array_agg(actor ORDER BY actor), ', ') AS actor_list FROM table_name GROUP BY movie;</code>
Cela regroupe les acteurs dans un tableau, puis le convertit en une chaîne séparée par des virgules. La clause ORDER BY actor
trie les acteurs par ordre alphabétique dans la liste de chaque film.
Personnalisation de l'ordre de la liste des acteurs :
Pour contrôler l'ordre des acteurs dans chaque liste (par exemple, par ordre de facturation), ajoutez ORDER BY
à l'intérieur de string_agg()
ou array_agg()
:
<code class="language-sql">SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list --Alphabetical order FROM table_name GROUP BY movie;</code>
Cette approche rationalise la présentation des relations film-acteur, facilitant l'analyse et l'affichage des données.
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!