Maison  >  Article  >  base de données  >  Comment faire pivoter les données dans MySQL à l'aide des instructions « CASE » ou « IF » ?

Comment faire pivoter les données dans MySQL à l'aide des instructions « CASE » ou « IF » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-09 10:05:02209parcourir

How to Pivot Data in MySQL Using `CASE` or `IF` Statements?

Affichage des données au format pivot avec GROUP BY

La tâche à accomplir consiste à transformer une table de base de données relationnelle avec des lignes représentant des points de données individuels en un format pivot dans lequel les données sont organisées en colonnes basées sur des horodatages et les valeurs sont regroupées par un identifiant spécifique.

Pour obtenir cette structure pivot, nous pouvons utiliser l'instruction CASE dans MySQL. Cette instruction nous permet d'attribuer conditionnellement des valeurs en fonction de différentes conditions :

SELECT d.data_timestamp
, SUM( CASE WHEN data_id = 1 THEN data_value ELSE 0 END ) AS 'input_1'
, SUM( CASE WHEN data_id = 2 THEN data_value ELSE 0 END ) AS 'input_2'
...
, SUM( CASE WHEN data_id = 20 THEN data_value ELSE 0 END ) AS 'input_20'
FROM data
GROUP BY data_timestamp
ORDER BY data_timestamp ASC

Dans cette requête, nous utilisons la fonction SUM pour agréger la valeur data_value pour chaque data_timestamp distinct. L'instruction CASE vérifie si data_id correspond à une valeur spécifique (par exemple, 1, 2 ou 20). Si cela correspond, la data_value correspondante est incluse dans la somme pour la colonne respective (par exemple, input_1, input_2, input_20). Si aucune correspondance n’est trouvée, zéro est utilisé dans le calcul. Cela donne un tableau où data_timestamp est l'identifiant de ligne, et chaque data_id a une colonne dédiée affichant sa data_value agrégée correspondante.

Nous pouvons également utiliser l'instruction IF au lieu de CASE dans le même but :

SELECT d.data_timestamp
, SUM( IF(data_id = 1, data_value, 0) ) AS 'input_1'
, SUM( IF(data_id = 2, data_value, 0) ) AS 'input_2'
...
, SUM( IF(data_id = 20, data_value, 0) ) AS 'input_20'
FROM data
GROUP BY data_timestamp
ORDER BY data_timestamp ASC

Les approches CASE et IF nous permettent de générer dynamiquement les colonnes nécessaires et d'agréger les valeurs en fonction du data_id et du data_timestamp, présentant finalement les données dans le format pivot souhaité.

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