Requête SQL avec AVG et GROUP BY pour plusieurs valeurs de passage
Vous avez rencontré des difficultés lors de la création d'une requête SQL pour récupérer des informations spécifiques à partir d'un table avec la structure suivante :
+------------+--------------+----------------+ | id | pass | val | +------------+--------------+----------------+ | DA02959106 | 5.0000000000 | 44.4007000000 | | 08A5969201 | 1.0000000000 | 182.4100000000 | | 08A5969201 | 2.0000000000 | 138.7880000000 | ...
Votre objectif est de générer une requête qui extrait les informations suivantes :
id, AVG of 'val' for 'pass' = 1, AVG of 'val' for 'pass' = 2, etc
Le résultat souhaité doit ressembler à :
+------------+---------+---------+---------+---------+---------+---------+---------+ | id | val_1 | val_2 | val_3 | val_4 | val_5 | val_6 | val_7 | +------------+---------+---------+---------+---------+---------+---------+---------+ | DA02959106 | 186.147 | 148.266 | 111.905 | 76.3985 | 44.4007 | 0 | 0 | +------------+---------+---------+---------+---------+---------+---------+---------+
Solution 1 : Approche directe
Pour y parvenir, vous pouvez utiliser la requête suivante :
SELECT id, pass, AVG(val) AS val_1 FROM data_r1 GROUP BY id, pass;
Cette requête calcule la valeur moyenne pour chaque combinaison unique de id et pass.
Solution 2 : Agrégation conditionnelle
Si vous préférez n'avoir qu'une seule ligne pour chaque identifiant, vous pouvez utiliser cette requête :
SELECT d1.id, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 1) as val_1, (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 2) as val_2, ... from data_r1 d1 GROUP BY d1.id
Cette requête utilise l'agrégation conditionnelle pour calculer les valeurs moyennes des différentes valeurs de réussite au sein de chaque identifiant.
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!