SQL-Abfrage
-
Hallo,
ich habe eine Tabelle der folgenden Form, die für verschiedene Parameterwerte und verschiedene Testdatensätze die Ergebnisse eines Algorithmus zeigen:
Para Test set Result 1 5 10 1 7 12 2 5 18 2 4 11 2 7 15
Ich möchte nun die verschiedenen Paramenterwerte (1 und 2) hinsichtlich des Ergebnis vergleichen. Dabei sollen nur Testdatensätze verwendet werden, die bei allen Paramenterwerten vorkommen (also 5 und 7, nicht 4). Für jeden Parameterwert möchte ich die erzielten Ergebnisse über die gemeinsam verwandten Testdatensätze mitteln. Am Ende möchte ich also folgendes erhalten:
Für Para = 1: (10 + 12) / 2 = 11
Für Para = 2: (18 + 15) / 2 = 16.5Weiss jemand, wie man das mit SQL macht?
-
Das ist nicht einfach. Wenn Parameter und Testset den Primärschlüssel bilden, also unique sind, würde ich folgenden Ansatz wählen:
* wenn es z.B. drei verschiedene Parameter gibt müssen die Test sets ebenfalls dreimal vorkommen. In deinem Beispiel kann 4 nicht verwendet werden weil du zwei Parameter hast aber nur eine Zeile mit Testset = 4 vorkommt.
* diese schadhaften Zeilen mußt du herausfiltern
* dann kannst du mit den restlichen Zeilen mit AVG() and friends operieren.
-
Bin noch nicht ganz wach, aber vielleicht so?
SELECT Para, MIN(Result) AS [min], MAX(Result) AS [max], AVG(Result) AS [avg] FROM Tabelle WHERE [Test set] IN ( SELECT [Test set] FROM Tabelle GROUP BY [Test set] HAVING COUNT(*) = 2 ) GROUP BY Para