Résultats de la requête MySQL PIVOT avec GROUP BY
Problème :
Transformation d'une table de base de données en afficher les lignes sous forme de colonnes, en regroupant les données selon une clé spécifiée (par exemple, horodatage) tout en garantissant que toutes les valeurs de données pour chaque clé sont présentées dans la colonne correspondante.
Requête proposée :
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 d.data_timestamp
ORDER BY d.data_timestamp ASC
Copier après la connexion
Explication :
- La requête externe sélectionne des horodatages de données distincts dans la table de données.
- Pour chaque horodatage de données, la requête calcule le somme des valeurs de données pour chaque data_id à l'aide de la fonction IF() à l'intérieur de l'agrégat SUM().
- Si le data_id correspond à l'identifiant souhaité (par exemple, 1 pour input_1), la valeur de données correspondante est ajoutée à la somme ; sinon, 0 est ajouté.
- Ce calcul est répété pour chaque data_id jusqu'à 20, créant une colonne pour chaque data_id différent.
- Le résultat final est regroupé par horodatage des données et classé par ordre croissant. order.
Limitations :
- Cette approche nécessite une somme explicite pour chaque data_id dans la requête, ce qui peut ne pas être réalisable s'il y a un grand nombre d'identifiants.
- Une approche alternative impliquant un CASE ou des JOIN à plusieurs niveaux peut être utilisée en fonction des exigences spécifiques et de la structure des données.
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!