Maison  >  Article  >  base de données  >  Comment calculer les valeurs moyennes pour différentes valeurs de réussite dans une requête SQL ?

Comment calculer les valeurs moyennes pour différentes valeurs de réussite dans une requête SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 03:03:27776parcourir

How to Calculate Average Values for Different Pass Values in a SQL Query?

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!

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