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

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

Linda Hamilton
Libérer: 2024-10-26 03:03:27
original
775 Les gens l'ont consulté

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 |
...
Copier après la connexion

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
Copier après la connexion

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       |
+------------+---------+---------+---------+---------+---------+---------+---------+
Copier après la connexion

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;
Copier après la connexion

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
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!