Announcement

Collapse
No announcement yet.

Query - Differenz vom Gruppendurchschnitt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Query - Differenz vom Gruppendurchschnitt

    Hallo,

    ich hab ein Problem mit einer Abfrage auf einem MS SQL Server 2008, ich hoffe ihr könnt mir weiterhelfen:

    Ich ermittle den Durchschnitt einer Gruppierung mit

    Code:
    select Testnummer, AVG(Varianzkoeffizient) AS AVGP
    From  tabelle
    Group bei Testnummer
    soweit ja kein problem.

    jetzt möchte ich prüfen, ob die Abweichung des Varianzkoeffizients eines Wertes vom Gruppendurchschnitt mehr als der Schwellwert X% beträgt

    (Die Werte mit Testnummer 14 haben zB AVG(Varianzkoeffizient) von 100, Varianzkoeffizient von Wert XY mit Testnummer 14 hat den Wert 105, Abweichung von 5% > Schwellwert )


    Und da hörts mit meinem SQL-Kenntnissen schon auf
    Ich denke die Lösung ist relativ simpel, habe aber ewig rumprobiert und komme nicht drauf...

  • #2
    Hallo ph1l,

    mit "prüfen" meinst Du, Du möchstest nur die Fälle selektieren, die den Schwellwert überschreiten?

    Das geht über die HAVING Klausel, wo Du den Aggregations-Wert AVG auch verwenden kannst:
    [highlight=SQL]select Testnummer, AVG(Varianzkoeffizient) AS AVGP
    From tabelle
    Group bei Testnummer
    HAVING AVG(Varianzkoeffizient) >= 105[/highlight]
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      hi, erstmal danke für die schnelle antwort !

      was mich interessiert ist aber die abweichung der EINZELNEN werte vom gruppendurchschnitt.

      ich möchte alle werte ausgeben die in relation zum mittelwert der testgruppe zu stark streuen....


      habe hier ein schönes bild gegooglt

      http://www.ipsl.jussieu.fr/GLACIO/ho...NSO_Page_2.jpg

      Die Punkte wären jetzt bei mir die einzelnen Werte zu einer Testnummer und die Gerade wäre AVG(Varianzkoeffizient)

      hoffe das hilft weiter!
      Zuletzt editiert von ph1l; 17.07.2009, 10:16.

      Comment


      • #4
        Etwas in der Richtung?
        [highlight=SQL]SET NOCOUNT ON;
        CREATE TABLE #Dummy (Id int, Wert int);

        INSERT INTO #Dummy VALUES (1, 92);
        INSERT INTO #Dummy VALUES (1, 99);
        INSERT INTO #Dummy VALUES (1, 100);
        INSERT INTO #Dummy VALUES (1, 101);
        INSERT INTO #Dummy VALUES (1, 102);
        INSERT INTO #Dummy VALUES (1, 105);
        INSERT INTO #Dummy VALUES (1, 106);

        SELECT Id, AVG(Wert)
        FROM #Dummy
        GROUP BY Id;

        SELECT *
        FROM #Dummy
        WHERE Wert >= 5 + (SELECT AVG(Wert)
        FROM #Dummy AS SUB
        WHERE SUB.Id = #Dummy.Id);
        GO
        DROP TABLE #Dummy;[/highlight]
        [highlight=code]Id
        ----------- -----------
        1 100

        Id Wert
        ----------- -----------
        1 105
        1 106
        [/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          perfekt ! danke, danke danke !

          frag mich grade wieso ich da gestern nicht drauf gekommen bin

          Comment


          • #6
            Geht auch noch eleganter; dann weißt Du nicht nur, welche Datensätze abweichen, sondern auch von welchem Durchschnittswert.
            [highlight=SQL]SELECT D.Id, D.Wert, SUB.AvgWert
            FROM #Dummy AS D
            INNER JOIN
            (SELECT Id, AVG(Wert) AS AvgWert
            FROM #Dummy
            GROUP BY Id) AS SUB
            ON D.Id = SUB.Id
            WHERE D.Wert >= 5 + SUB.AvgWert[/highlight]
            [highlight=code]Id Wert AvgWert
            ----------- ----------- -----------
            1 105 100
            1 106 100
            [/highlight]
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              hatte ich mir auch gedacht, das das noch fehlt..

              habs so ziemlich genauso gelöst

              Comment

              Working...
              X