Announcement

Collapse
No announcement yet.

Gewichteter Durchschnitt

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

  • Gewichteter Durchschnitt

    Hallo,

    ich hab mal wieder ein Problem: ich möchte einen gewichteten Durchschnitt berechnen. Folgende Tabelle mit Einträgen liegt zugrunde:
    ID | Menge | Qualitaet
    -----------------------------------------------------------
    1 | 20 | 7
    1 | 10 | 8
    1 | 20 | 9
    2 | 2 | 4
    2 | 4 | 1
    2 | 6 | 2
    Die durchschnittliche Qualität soll sich nun ergeben aus
    (Menge * Qualitaet) / Gesamtmenge
    jeweils für einzelne IDs

    Hab es versucht mit:
    [highlight=SQL]
    SELECT
    ID, sum(Menge*Qualitaet)/Gesamtmenge as Durchschnitt, sum(Menge) as Gesamtmenge
    FROM TEST
    GROUP BY ID
    [/highlight]
    Aber natürlich hat er die Gesamtmenge nicht zur Verfügung.

    Hiermit hab ich ja quasi alles was ich brauche, aber könnte ich damit auch sofort die beiden Spalten mit einander verrechnen?
    [highlight=SQL]
    SELECT
    ID, sum(Menge*Qualitaet) as MengeMalQuali, sum(Menge) as Gesamtmenge
    FROM TEST
    GROUP BY ID
    [/highlight]

    Vielen Dank
    Stefan

    EDIT: es geht um MySql
    Zuletzt editiert von Bernhard Geyer; 12.01.2010, 16:32.

  • #2
    Hallo Stefan,

    die Gesamtsumme kannst Du über ein weiteres Sub-Select ermitteln.
    Die Syntax für MS SQL Server sähe so; sollte analog aber auch mit MySql gehen.

    [highlight=SQL]CREATE TABLE #tmp (ID int, Menge int, Qualitaet int);
    INSERT INTO #tmp VALUES(1, 20, 7);
    INSERT INTO #tmp VALUES(1, 10, 8);
    INSERT INTO #tmp VALUES(1, 20, 9);
    INSERT INTO #tmp VALUES(2, 2, 4);
    INSERT INTO #tmp VALUES(2, 4, 1);
    INSERT INTO #tmp VALUES(2, 6, 2);

    GO

    SELECT ID, SUM(Menge * Qualitaet)
    /
    (SELECT SUM(Menge)
    FROM #tmp AS Sub
    WHERE Sub.ID = #tmp.ID)
    FROM #tmp
    GROUP BY id
    GO

    DROP TABLE #tmp[/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
      Klappt wunderbar. Vielen Dank.

      Comment

      Working...
      X