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
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 |