Heim >Datenbank >MySQL-Tutorial >Wie kann ich Durchschnittswerte für jeden „Durchlauf' für dieselbe „ID' berechnen und die Daten für eine Zeile pro „ID' in SQL plotten?

Wie kann ich Durchschnittswerte für jeden „Durchlauf' für dieselbe „ID' berechnen und die Daten für eine Zeile pro „ID' in SQL plotten?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 18:09:02505Durchsuche

How can I calculate average values for each 'pass' for the same 'id' and pivot the data for one row per 'id' in SQL?

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!

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