Maison >base de données >tutoriel mysql >Comment pouvez-vous utiliser « AVG » et « GROUP BY » dans MySQL pour calculer plusieurs moyennes d'une colonne pour différents groupes dans une table ?

Comment pouvez-vous utiliser « AVG » et « GROUP BY » dans MySQL pour calculer plusieurs moyennes d'une colonne pour différents groupes dans une table ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 11:56:02525parcourir

How can you use  `AVG` and `GROUP BY` in MySQL to calculate multiple averages of a column for different groups within a table?

Requête SQL avec AVG et Group By

Dans MySQL, une requête qui extrait plusieurs moyennes d'une colonne pour différents groupes au sein d'une table peut être obtenu en utilisant une combinaison des clauses AVG() et GROUP BY. Considérons une table data_r1 avec la structure suivante :

mysql> select id, pass, val from data_r1 limit 10;
+------------+--------------+----------------+
| id         | pass         | val            |
+------------+--------------+----------------+
| DA02959106 | 5.0000000000 | 44.4007000000 |
| 08A5969201 | 1.0000000000 | 182.4100000000 |
| 08A5969201 | 2.0000000000 | 138.7880000000 |
| DA02882103 | 5.0000000000 | 44.7265000000 |
| DA02959106 | 1.0000000000 | 186.1470000000 |
| DA02959106 | 2.0000000000 | 148.2660000000 |
| DA02959106 | 3.0000000000 | 111.9050000000 |
| DA02959106 | 4.0000000000 | 76.1485000000 |
| DA02959106 | 5.0000000000 | 44.4007000000 |
| DA02959106 | 4.0000000000 | 76.6485000000 |

Pour extraire les informations souhaitées de cette table, utilisez la requête suivante :

SELECT id, pass, AVG(val) AS val
FROM data_r1
GROUP BY id, pass;

Cette requête regroupe les lignes de la table data_r1 par les colonnes id et pass, puis calcule la valeur moyenne de la colonne val pour chaque groupe. Le résultat est un tableau avec une ligne pour chaque combinaison unique d'identifiant et de pass, avec la valeur moyenne correspondante pour val.

Une requête alternative, qui obtient le même résultat mais renvoie une seule ligne pour chaque identifiant unique avec plusieurs valeurs moyennes :

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,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 3) as val_3,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 4) as val_4,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 5) as val_5,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 6) as val_6,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 7) as val_7
FROM data_r1 d1
GROUP BY d1.id

Cette requête utilise des sous-requêtes imbriquées pour calculer les valeurs moyennes de chaque valeur de réussite au sein d'un groupe d'identifiants spécifique. La fonction IFNULL() est utilisée pour garantir que les valeurs nulles sont remplacées par 0, empêchant ainsi les erreurs de division par zéro.

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