Re: CASE und Aggregatfunktion

From: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: CASE und Aggregatfunktion
Date: 2009-03-26 10:29:45
Message-ID: 20090326102945.GA10641@tux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Marc Hanisch <hanisch(at)ateam(dot)de> wrote:

> Hallo Liste,
>
> ich nutze öfter eine Query in ähnlicher Art und Weise:
>
> SELECT name,
> CASE WHEN SUM(betrag) > 0
> THEN SUM(betrag)
> ELSE 0
> END AS einnahmen,
> CASE WHEN SUM(betrag) < 0
> THEN SUM(betrag)
> ELSE 0
> END AS ausgaben
> FROM table
> GROUP BY name

Bist Du Dir sicher, damit das zu erreichen, was Du willst?
Ich denke, Du willst eher

sum(
case when betrag > 0 then betrag else 0 end) as einnahmen,

> Es erscheint mir aber umständlich, dass ich PostgreSQL für die Bedingung
> (WHEN) und für die Anweisung (THEN) um die Summierung bemühen muss, was
> ja wahrscheinlich doppelt Performance frisst... Gibt es da einen
> eleganteren Weg? Schließlich wurde die Summe des Betrages ja bei der
> ersten Bedingung bereits berechnet.

Mir erscheint es unlogisch, was Du machst:

test=*# select * from summen;
i | s
---+------
1 | 10
2 | 20
3 | -5
4 | -100
(4 Zeilen)

Zeit: 0,218 ms
test=*# select case when sum(s) > 0 then sum(s) end as einnahmen, case when sum(s) < 0 then sum(s) end as ausgaben from summen;
einnahmen | ausgaben
-----------+----------
| -75
(1 Zeile)

Zeit: 0,274 ms
test=*# select sum(case when s > 0 then s else 0 end) as einnahmen, sum(case when s < 0 then s else 0 end) as ausgaben from summen;
einnahmen | ausgaben
-----------+----------
30 | -105
(1 Zeile)

Welche Variante willst Du?

Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Marc Hanisch 2009-03-26 10:54:41 Re: CASE und Aggregatfunktion
Previous Message Marc Hanisch 2009-03-26 10:11:46 Re: CASE und Aggregatfunktion