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.5

    Weiss 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
    

Anmelden zum Antworten