Maison >base de données >tutoriel mysql >Comment faire pivoter les résultats d'une requête dans MySQL à l'aide de GROUP BY ?

Comment faire pivoter les résultats d'une requête dans MySQL à l'aide de GROUP BY ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-15 10:46:02884parcourir

How to Pivot Query Results in MySQL Using GROUP BY?

Résultats de requête MySQL PIVOTING avec GROUP BY

Objectif

Transformez les lignes en colonnes dans une table MySQL à l'aide de la technique PIVOT ou GROUP BY.

Arrière-plan

PIVOTING, une technique de transformation de données, réorganise les données des lignes en colonnes. Dans ce cas, l'objectif est de regrouper les données par colonne spécifique, telle que l'horodatage, et d'afficher chaque valeur de données dans une colonne distincte.

Utilisation des instructions CASE

Au lieu de la syntaxe PIVOT traditionnelle , qui n'est pas largement prise en charge dans MySQL, la fonction SUM() peut être utilisée conjointement avec les instructions CASE pour obtenir le résultat souhaité.

<code class="sql">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</code>

Utilisation des instructions IF

Alternativement, les instructions IF peut être utilisé dans la fonction SUM() pour obtenir le même résultat.

<code class="sql">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</code>

Utilisation de plusieurs instructions JOIN

Une autre approche consiste à utiliser plusieurs instructions JOIN pour créer le résultat souhaité.

<code class="sql">SELECT d.data_timestamp
     , d01.data_value AS 'input_1'
     , d02.data_value AS 'input_2'
     ...
     , d20.data_value AS 'input_20'
FROM
  (SELECT DISTINCT d.data_timestamp
    FROM data
  ) AS d
  LEFT JOIN data AS d01
    ON d01.data_timestamp = d.data_timestamp
    AND d01.data_id = 1
  LEFT JOIN data AS d02
    ON d02.data_timestamp = d.data_timestamp
    AND d02.data_id = 2
  ...                                   --- 20 JOINs
  LEFT JOIN data AS d20
    ON d20.data_timestamp = d.data_timestamp
    AND d20.data_id = 20
ORDER BY d.data_timestamp ASC</code>

En utilisant ces techniques, vous pouvez facilement faire pivoter les résultats des requêtes dans MySQL à l'aide de GROUP BY.

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