SQL-Abfrage mit AVG und GROUP BY
In SQL kann es vorkommen, dass Sie gruppierte Durchschnittswerte aus einer Tabelle extrahieren müssen. Dies kann mit den Klauseln AVG() und GROUP BY erreicht werden.
Betrachten Sie die Beispieltabelle:
id | pass | val |
---|---|---|
DA02959106 | 5.00 | 44.40 |
08A5969201 | 1.00 | 182.41 |
08A5969201 | 2.00 | 138.78 |
DA02882103 | 5.00 | 44.73 |
DA02959106 | 1.00 | 186.15 |
DA02959106 | 2.00 | 148.27 |
DA02959106 | 3.00 | 111.91 |
DA02959106 | 4.00 | 76.15 |
DA02959106 | 5.00 | 44.40 |
DA02959106 | 4.00 | 76.65 |
Berechnung der Durchschnittswerte für jeden Durchgang
Um den Durchschnittswert für jeden „Durchlauf“ für dieselbe „ID“ zu berechnen, verwenden Sie die folgende Abfrage:
<code class="sql">SELECT id, pass, AVG(val) AS val_1 FROM data_r1 GROUP BY id, pass;</code>
Diese Abfrage gruppiert die Zeilen sowohl nach „ID“ als auch nach „Durchlauf“ und berechnet die durchschnittlicher „Wert“ für jede Gruppe. Das Ergebnis wäre:
id | pass | val_1 |
---|---|---|
DA02959106 | 1.00 | 186.15 |
08A5969201 | 1.00 | 182.41 |
DA02882103 | 5.00 | 44.73 |
08A5969201 | 2.00 | 138.78 |
DA02959106 | 2.00 | 148.27 |
DA02959106 | 3.00 | 111.91 |
DA02959106 | 4.00 | 76.40 |
DA02959106 | 5.00 | 44.40 |
Pivotieren der Daten für eine Zeile pro ID
Wenn Sie lieber eine Zeile pro „ID“ mit mehreren Spalten haben möchten, die das darstellen Um Durchschnittswerte für jeden „Durchlauf“ zu ermitteln, verwenden Sie die folgende Abfrage:
<code class="sql">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;</code>
Diese Abfrage verwendet Unterabfragen, um die Durchschnittswerte für jeden „Durchlauf“ zu extrahieren und sie den entsprechenden Spalten zuzuweisen. Die resultierende Tabelle wäre:
id | val_1 | val_2 | val_3 | val_4 | val_5 | val_6 | val_7 |
---|---|---|---|---|---|---|---|
DA02959106 | 186.15 | 148.27 | 111.91 | 76.40 | 44.40 | 0 | 0 |
Das obige ist der detaillierte Inhalt vonWie kann ich Durchschnittswerte für jeden „Durchlauf' für dieselbe „ID' berechnen und die Daten für eine Zeile pro „ID' in SQL plotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!