Doppelte Werte einmal summieren
Duba
- datenbank
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
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
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
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
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.
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
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