Berechnung von Durchschnittswerten für verschiedene Durchgänge mit SQL
In MySQL kann das Abrufen von Durchschnittswerten durch Gruppieren von Daten mit AVG und GROUP BY erreicht werden Funktionen. Wenn es jedoch um mehrere Kriterien geht, wie etwa die Berechnung von Durchschnittswerten für verschiedene Werte einer bestimmten Spalte, wird die Aufgabe etwas komplexer.
In diesem Fall besteht das Ziel darin, den Durchschnitt der Spalte „Wert“ zu extrahieren für jede eindeutige „ID“ für unterschiedliche Werte von „pass“, die zwischen 1 und 7 liegen können.
Unterabfragelösung
Ein Ansatz besteht darin, eine Unterabfrage für zu verwenden jeder Wert von „pass“ innerhalb der AVG-Funktion. Dadurch wird eine Reihe von Werten für jede Kombination aus „id“ und „pass“ zurückgegeben.
<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 = 7) as val_7 from data_r1 d1 GROUP BY d1.id</code>
Diese Abfrage ruft zunächst die eindeutigen „id“-Werte aus der Tabelle „data_r1“ ab. Dann führt es für jede „id“ sieben Unterabfragen aus, um den Durchschnittswert für jeden möglichen Wert von „pass“ zu berechnen, und speichert sie als separate „val_n“-Spalten. Die IFNULL-Funktion wird verwendet, um alle Fälle zu behandeln, in denen die Unterabfrage NULL-Werte zurückgibt, um sicherzustellen, dass das Ergebnis eine Zahl oder Null ist.
Der Vorteil dieses Ansatzes besteht darin, dass er für jede „ID“ eine einzelne Zeile zurückgibt. was die Arbeit mit den Ergebnissen erleichtert. Es kann jedoch etwas ausführlich sein, insbesondere wenn es viele mögliche Werte für „bestanden“ gibt.
Alternativer Ansatz
Wenn Sie eine prägnantere Methode bevorzugen, können Sie dies tun Verwenden Sie eine Kombination aus GROUP BY- und CASE-Anweisungen, um ein ähnliches Ergebnis zu erzielen:
<code class="sql">SELECT id, SUM(CASE WHEN pass = 1 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 1 THEN id END) AS val_1, SUM(CASE WHEN pass = 2 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 2 THEN id END) AS val_2, [...] SUM(CASE WHEN pass = 7 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 7 THEN id END) AS val_7 FROM data_r1 GROUP BY id</code>
Diese Abfrage verwendet mehrere CASE-Anweisungen, um den „pass“-Wert auszuwerten und nur die entsprechenden „val“-Werte in die Berechnung einzubeziehen. Die COUNT(DISTINCT ...)-Ausdrücke im Nenner stellen sicher, dass der Durchschnitt korrekt berechnet wird, auch wenn es mehrere „val“-Werte für eine bestimmte „id“- und „pass“-Kombination gibt.
Noch einmal: Die IFNULL-Funktion kann verwendet werden, um alle Fälle zu behandeln, in denen die Division zu NULL führt, um sicherzustellen, dass die Ausgabe eine Zahl oder Null ist.
Welchen Ansatz Sie auch wählen, diese Abfragen extrahieren effektiv die durchschnittlichen „Val“-Werte für jede eindeutige „ID“ für die unterschiedlichen Werte von „pass“ aus der Tabelle „data_r1“.
Das obige ist der detaillierte Inhalt vonWie berechnet man Durchschnittswerte für verschiedene Durchgänge mithilfe von SQL in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!