From: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
---|---|
To: | Carlos Enrique Perez <carlos(dot)perez(at)syswarp(dot)com(dot)ar> |
Cc: | Jaime Soler <jaime(dot)soler(at)gmail(dot)com>, Emanuel Calvo <3manuek(at)gmail(dot)com>, Juan Francisco Giménez Silva <juanfgs(at)openmailbox(dot)org>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Ayuda de IF() de MySQL a CASE en PostgreSQL |
Date: | 2017-02-20 15:22:20 |
Message-ID: | 20170220152220.fj7vut7umooobucn@alvherre.pgsql |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
From | Date | Subject | |
---|---|---|---|
Next Message | Ruben Fitó | 2017-02-21 10:56:02 | Postgrest como interfície REST de la base de datos |
Previous Message | Carlos Enrique Perez | 2017-02-20 14:47:25 | Re: Ayuda de IF() de MySQL a CASE en PostgreSQL |