Heim >Datenbank >MySQL-Tutorial >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?

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
Susan SarandonOriginal
2024-10-27 11:56:02523Durchsuche

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 |

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;

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

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!

Stellungnahme:
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