Re: CASE und Aggregatfunktion

From: Marc Hanisch <hanisch(at)ateam(dot)de>
To: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
Cc: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: CASE und Aggregatfunktion
Date: 2009-03-26 12:04:40
Message-ID: 49CB6F58.60506@ateam.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

--- Original-Nachricht ---
Absender: Andreas Kretschmer
Datum: 26.03.2009 12:52 Uhr
> Okay, ich kann Dich beruhigen.
>
> Ich erzeuge mir mal eine saudumme Aggregatfunktion, die eigentlich nix
> weiter macht, als 1 zu liefern. Saudumm also. Nebenbei plappert sie aber
> auch noch rum, immer wenn sie aufgrufen wird. Nicht so dumm für uns,
> weil man dann sieht, wie oft sie aufgerufen wird:
>
> test=# select * from summen;
> i | s
> ---+------
> 1 | 10
> 2 | 20
> 3 | -5
> 4 | -100
> (4 Zeilen)
>
> Zeit: 0,151 ms
> test=*# create or replace function agg_test(int, int) returns int as $$begin raise notice 'bin hier %',$2; return 1; end; $$language plpgsql immutable strict;
> CREATE FUNCTION
> Zeit: 0,695 ms
> test=*# create aggregate agg_test(basetype=int, sfunc=agg_test, stype=int,initcond=1);
> CREATE AGGREGATE
> Zeit: 0,507 ms
> test=*# select case when agg_test(s) > 0 then agg_test(s) end as einnahmen, case when agg_test(s) < 0 then agg_test(s) end as ausgaben from summen;
> NOTICE: bin hier 10
> NOTICE: bin hier 20
> NOTICE: bin hier -5
> NOTICE: bin hier -100
> einnahmen | ausgaben
> -----------+----------
> 1 |
> (1 Zeile)
>
>
> Wie man sieht, wird sie nur 1 mal pro Zeile aufgerufen. PG ist als
> schlau genug, das zu optimieren.
>
>
Hallo Andreas,

vielen Dank! Ich bin beeindruckt :-)
Jetzt bin ich beruhigt, da meine Query vielleicht blöd aussieht,
Postgres aber schlau genug dafür ist...

Viele Grüße,
Marc

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Albe Laurenz 2009-03-26 13:00:47 Re: CASE und Aggregatfunktion
Previous Message Andreas Kretschmer 2009-03-26 11:52:52 Re: CASE und Aggregatfunktion