Maison > base de données > tutoriel mysql > Comment transposer des lignes SQL en colonnes à l'aide de PostgreSQL ?

Comment transposer des lignes SQL en colonnes à l'aide de PostgreSQL ?

Mary-Kate Olsen
Libérer: 2024-12-31 19:44:10
original
872 Les gens l'ont consulté

How to Transpose SQL Rows into Columns Using PostgreSQL?

Transposition de lignes SQL en colonnes : un guide complet

En SQL, les données peuvent souvent être structurées avec des lignes représentant des enregistrements individuels et des colonnes contenant des attributs spécifiques. Cependant, il existe des situations où il devient nécessaire de transformer des lignes en colonnes, processus appelé transposition. Dans cet article, nous allons explorer une solution pour transposer des lignes en colonnes à l'aide de PostgreSQL.

Le problème

Considérez le scénario suivant : vous disposez de deux tables, l'une avec des réponses aux questions et l'autre contenant les vraies questions. L'objectif est de transposer les données afin que chaque utilisateur dispose d'une ligne représentant ses réponses à toutes les questions.

responses:
user_id | question_id | body
----------------------------
1       | 1           | Yes
2       | 1           | Yes
1       | 2           | Yes
2       | 2           | No
1       | 3           | No
2       | 3           | No

questions:
id | body
-------------------------
1 | Do you like apples?
2 | Do you like oranges?
3 | Do you like carrots?
Copier après la connexion

Le résultat souhaité ressemblerait à ceci :

user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1       | Yes                 | Yes                  | No
2       | Yes                 | No                   | No
Copier après la connexion

La solution

Pour transposer les données, nous utiliserons une combinaison de JOIN et MAX() avec une expression CASE. La requête est la suivante :

SELECT r.user_id,
       MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?",
       MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?",
       MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?"
FROM RESPONSES r
JOIN QUESTIONS q ON q.id = r.question_id
GROUP BY r.user_id
Copier après la connexion

Décomposition de la requête

1. JOIN : L'opération JOIN établit une relation entre les tables RESPONSES et QUESTIONS basées sur la colonne commune question_id. Cela nous permet d'associer les réponses aux questions correspondantes.

2. MAX() avec CASE : La fonction MAX() est utilisée pour agréger la colonne du corps, en considérant uniquement la valeur maximale pour chaque combinaison utilisateur et question. L'expression CASE dans MAX() agit comme une instruction conditionnelle qui récupère la valeur du corps d'une question spécifique ou NULL si la condition n'est pas remplie.

3. GROUP BY : La clause GROUP BY regroupe les résultats par colonne user_id. Cela garantit que chaque ligne de la sortie représente un utilisateur unique.

Conclusion

La requête SQL fournie transpose efficacement les lignes en colonnes, vous permettant d'extraire facilement les réponses des utilisateurs pour un ensemble de questions. Cette technique est communément appelée données pivotantes et est souvent utilisée dans l’analyse et la création de rapports de données. En utilisant les constructions JOIN, MAX() et CASE aux côtés de GROUP BY, vous pouvez réaliser de puissantes transformations de données en SQL.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal