Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie können Sie „AVG' und „GROUP BY' in MySQL verwenden, um mehrere Durchschnittswerte einer Spalte für verschiedene Gruppen innerhalb einer Tabelle zu berechnen?

Susan Sarandon
Freigeben: 2024-10-27 11:56:02
Original
424 Leute haben es durchsucht

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

SQL-Abfrage mit AVG und Group By

In MySQL eine Abfrage, die mehrere Durchschnittswerte einer Spalte für verschiedene Gruppen innerhalb einer Tabelle extrahiert kann durch eine Kombination der AVG()- und GROUP BY-Klauseln erreicht werden. Betrachten Sie eine Tabelle data_r1 mit der folgenden Struktur:

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 |
Nach dem Login kopieren

Um die gewünschten Informationen aus dieser Tabelle zu extrahieren, verwenden Sie die folgende Abfrage:

SELECT id, pass, AVG(val) AS val
FROM data_r1
GROUP BY id, pass;
Nach dem Login kopieren

Diese Abfrage gruppiert die Zeilen in der Tabelle data_r1 anhand der ID- und Pass-Spalten und berechnet dann den Durchschnittswert der Val-Spalte für jede Gruppe. Das Ergebnis ist eine Tabelle mit einer Zeile für jede eindeutige Kombination aus ID und Pass, mit dem entsprechenden Durchschnittswert für val.

Eine alternative Abfrage, die das gleiche Ergebnis erzielt, aber eine einzelne Zeile für jede eindeutige ID mit zurückgibt mehrere Durchschnittswerte:

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
Nach dem Login kopieren

Diese Abfrage verwendet verschachtelte Unterabfragen, um die Durchschnittswerte für jeden Passwert innerhalb einer bestimmten ID-Gruppe zu berechnen. Die Funktion IFNULL() wird verwendet, um sicherzustellen, dass Nullwerte durch 0 ersetzt werden, wodurch Fehler bei der Division durch Null verhindert werden.

Das obige ist der detaillierte Inhalt vonWie können Sie „AVG' und „GROUP BY' in MySQL verwenden, um mehrere Durchschnittswerte einer Spalte für verschiedene Gruppen innerhalb einer Tabelle zu berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!