Maison >base de données >tutoriel mysql >Comment puis-je concaténer plusieurs lignes en une seule ligne à l'aide de SQL ?

Comment puis-je concaténer plusieurs lignes en une seule ligne à l'aide de SQL ?

DDD
DDDoriginal
2025-01-15 08:48:43177parcourir

How Can I Concatenate Multiple Rows into a Single Row Using SQL?

Combinaison de plusieurs lignes en une seule ligne avec SQL

De nombreuses tâches de base de données nécessitent de fusionner plusieurs lignes avec des valeurs identiques dans une colonne en une seule ligne, en concaténant les valeurs d'une autre colonne. Imaginez une base de données de films avec des acteurs répertoriés dans des lignes séparées pour chaque film :

<code>Movie | Actor
----------------
A      1
A      2
A      3
B      4</code>

L'objectif est de créer un ensemble de résultats comme celui-ci :

<code>Movie | ActorList
----------------
A      1, 2, 3
B      4</code>

Utilisation de l'agrégation de chaînes pour la consolidation

La fonction

SQL string_agg fournit une solution efficace. Cette fonction d'agrégation concatène les valeurs d'une colonne spécifiée. Voici la requête :

<code class="language-sql">SELECT movie, string_agg(actor::text, ', ') AS actor_list
FROM tbl
GROUP BY movie;</code>

Voici la répartition :

  1. string_agg(actor::text, ', ') : Cette partie concatène les valeurs de la colonne actor, en utilisant une virgule et un espace comme séparateur. Le ::text convertit explicitement la colonne actor en texte, ce qui est nécessaire s'il ne s'agit pas déjà d'un type de données texte.
  2. GROUP BY movie : cela regroupe les lignes par colonne movie, garantissant que les acteurs du même film sont regroupés.
  3. actor_list : Il s'agit de l'alias de la chaîne concaténée résultante.

Améliorations et considérations :

  • Type de données : Assurez-vous que la colonne à agréger est de type texte. Sinon, utilisez un casting explicite (comme ::text montré ci-dessus).
  • Ordre : Pour trier les acteurs dans chaque liste, ajoutez ORDER BY à l'intérieur de string_agg :
<code class="language-sql">SELECT movie, string_agg(actor::text, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY movie;</code>

Ce tri dans la requête est généralement plus efficace que le tri de l'ensemble de résultats final.

Cette approche consolide efficacement plusieurs lignes en une seule ligne plus gérable, ce qui simplifie l'analyse des données et la création de rapports.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn