Maison > base de données > tutoriel mysql > le corps du texte

Comment pouvez-vous utiliser GROUP BY pour faire pivoter les données dans MySQL ?

Barbara Streisand
Libérer: 2024-11-08 13:48:02
original
799 Les gens l'ont consulté

How can you use GROUP BY to Pivot Data in MySQL?

Pivotement des résultats de requête à l'aide de MySQL GROUP BY

Dans une base de données relationnelle, le pivotement des données fait référence au réarrangement des lignes et des colonnes pour améliorer la visualisation des données . Ici, nous abordons un défi commun : transformer les données de lignes en colonnes à l'aide de GROUP BY.

Requête

Pour faire pivoter les données, nous pouvons utiliser le GROUPE Clause BY ainsi que des fonctions d'agrégation conditionnelles, telles que SUM ou CASE. Considérons la requête suivante :

<br>SELECT<br> d.data_timestamp,<br> SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) AS 'input_1',<br> SOMME (CAS QUAND data_id = 2 ALORS data_value ELSE 0 END) AS 'input_2'<br>FROM<br> data<br>GROUP BY<br> d.data_timestamp<br>ORDER BY<br> d.data_timestamp ASC;<br>

Explication

  • La requête récupère les valeurs data_timestamp uniques de la table de données et regroupe les résultats par data_timestamp.
  • Au sein de chaque groupe, il calcule la somme des data_values ​​pour le data_id correspondant (par exemple, input_1 pour data_id = 1).
  • La fonction SUM() gère les valeurs manquantes en prenant par défaut la valeur 0 pour les valeurs NULL.
  • La sortie de la requête est présentée sous forme de colonnes, avec chaque data_timestamp associé à la somme des data_values ​​pour le spécifié data_id.

Approches alternatives

MySQL propose également des méthodes alternatives pour faire pivoter les données. Ces approches incluent l'utilisation de la fonction IF() ou des jointures à plusieurs niveaux.

Fonction IF()

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

Jointures à plusieurs niveaux

<br>SELECT<br> d.data_timestamp,<br> d01.data_value AS 'input_1',<br> d02.data_value AS 'input_2'<br>FROM<br> (</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">SELECT DISTINCT d.data_timestamp
FROM data
Copier après la connexion

) AS d
LEFT JOIN
​​data AS d01
ON
d01.data_timestamp = d .data_timestamp ET d01.data_id = 1
LEFT JOIN
​​data AS d02
ON
d02.data_timestamp = d.data_timestamp AND d02.data_id = 2
ORDER BY
d.data_timestamp ASC;

Conclusion

La clause GROUP BY de MySQL fournit un mécanisme puissant pour faire pivoter les résultats des requêtes. Les techniques CASE, IF() et de jointure à plusieurs niveaux offrent une flexibilité dans la gestion des données et s'adaptent à diverses structures de données. Le choix de l'approche optimale dépend des exigences spécifiques et des considérations de performances.

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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal