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!