Duba: Doppelte Werte einmal summieren

Hallo,

ich habe in einer Tabelle Werte die ich, hier gruppiert nach Monat und Jahr, summieren möchte. Wenn zwei Zeilen aber die gleiche sid besitzen, soll der Wert nur einmal summiert werden. Er ist dann auch gleich.

Ich habe das nun so gelöst:

SELECT sum( tab1.wert ) total, date_format(datum,'%m.%Y') date
FROM (

SELECT wert, datum
FROM tabelle
WHERE x = 'y'
GROUP BY sid

) AS tab1
GROUP BY date
ORDER BY YEAR( datum ) , MONTH( datum )

Gibt es noch einen eleganteren (und schnelleren) Weg?

Grüße,
Duba

  1. yo,

    mein vorschlag wäre nicht schneller, aber ein wenig eleganter.

    SELECT sum( tab1.wert ) total, date_format(datum,'%m.%Y') date
    FROM (SELECT DISTINCT sid, wert, datum
          FROM tabelle
          WHERE x = 'y'
         ) AS tab1
    GROUP BY date
    ORDER BY YEAR( datum ) , MONTH( datum )
    ;

    des weiteren könnte es sein, dass deine ORDER BY klausel nicht bei jedem dbms so laufen würde, ich vermute mysql ist im einsatz ?

    Ilja

    1. mein vorschlag wäre nicht schneller, aber ein wenig eleganter.
      des weiteren könnte es sein, dass deine ORDER BY klausel nicht bei jedem dbms so laufen würde, ich vermute mysql ist im einsatz ?

      Ja, mysql in diesem Fall. Aber dein Beispiel entspricht eigentlich genau dem meinen ;)

      Grüße,
      Duba

      1. yo,

        Ja, mysql in diesem Fall. Aber dein Beispiel entspricht eigentlich genau dem meinen ;)

        nicht ganz, du benutzt GROUP BY um doppelte werte auszuschließen, ich benutze dafür DISTINCT, was ich in deinem falle "lesbarer" und somit eleganter finde.

        Ilja

        1. Hi,

          Ja, mysql in diesem Fall. Aber dein Beispiel entspricht eigentlich genau dem meinen ;)

          nicht ganz, du benutzt GROUP BY um doppelte werte auszuschließen, ich benutze dafür DISTINCT, was ich in deinem falle "lesbarer" und somit eleganter finde.

          Naja, aber die beiden Abfragen sind gleichwertig und ob DISTINCT oder GROUP BY... ist wohl Geschmackssache.

          1. yo,

            Naja, aber die beiden Abfragen sind gleichwertig und ob DISTINCT oder GROUP BY... ist wohl Geschmackssache.

            von der performance aller wahrscheinlichkeit ja, aber nicht vom lesen der abfrage. mit distinct kann ich schneller die absicht der unterabfrage erkennen und lesbarkeit ist ein wichtiges kriterium. aber darüber kann man sicherlich wie dem geschmack streiten. ich würde mich jedenfalls für den distinct entscheiden.

            Ilja

            1. von der performance aller wahrscheinlichkeit ja, aber nicht vom lesen der abfrage. mit distinct kann ich schneller die absicht der unterabfrage erkennen und lesbarkeit ist ein wichtiges kriterium. aber darüber kann man sicherlich wie dem geschmack streiten. ich würde mich jedenfalls für den distinct entscheiden.

              Von der Performance mit Sicherheit gleichwertig. Trotzdem danke - hab ja schließlich nach etwas eleganterem gefragt auch wenn mir etwas schnelleres lieber gewesen wäre :)

              Grüße,
              Duba