Carlos Enrique Perez escribió:
> Si el Case lo tenes en el select, el group by debe repetir el Case
> tambien.... algo que probablemente tire la performance de tu consulta
> si la misma se hace sobre muchos datos.

Ojo que si una expresión no volátil aparece en más de un lugar, el
ejecutor la evalúa una sola vez y el resto de los lugares re-utiliza el
valor.  (Es más complicado que eso, pero vale para el caso en que tienes
la misma expresión en la lista de resultados y en el GROUP BY).

Puedes probarlo con una función marcada IMMUTABLE que haga un RAISE
NOTICE:

alvherre=# create function peep(a int) returns int immutable language plpgsql 
as $$ begin raise notice 'peep %', $1; return $1; end; $$;
CREATE FUNCTION
Duración: 18,041 ms
alvherre=# create table quux as select * from generate_series(1, 10) a;
SELECT 10
Duración: 7,197 ms
alvherre=# select peep(a) from quux group by peep(a);
NOTICE:  peep 1
NOTICE:  peep 2
NOTICE:  peep 3
NOTICE:  peep 4
NOTICE:  peep 5
NOTICE:  peep 6
NOTICE:  peep 7
NOTICE:  peep 8
NOTICE:  peep 9
NOTICE:  peep 10
 peep 
──────
    8
    4
    1
    5
    3
   10
    9
    6
    2
    7
(10 filas)

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a