Eso está bien? que lo haga 2 veces? se podría modficar el motor para que ante un mismo cálculo para la misma tupla el optimizador utilice el resultado ya obtenido? o hay una razón mas de fondo para que lo vuelva a hacer?
Guillermo Villanueva El 6 de febrero de 2013 12:00, Alejandro Carrillo <faster...@yahoo.es>escribió: > 2 > > ------------------------------ > *De:* Guillermo E. Villanueva <guillermo...@gmail.com> > *Para:* pgsql-es-ayuda <pgsql-es-ayuda@postgresql.org> > *Enviado:* Miércoles 6 de febrero de 2013 9:57 > *Asunto:* [pgsql-es-ayuda] Re: Uso de resultado de función en la misma > proyección o en el filtro > > Respondiendome a mi mismo he visto en algunos foros que lo resuelven con > una subconsulta a nivel del from algo así como: > > select > col_1, > col_2, > *col_result*, > case when *col_result* > 0 then 'L' else 'D' END col_4 > from > ( > select > col_1, > col_2, > fn_funciondeusuario(parametros) *col_result*, > from > tablas > ) as tablas2 ; > > Mi intención era evitar que postgres haga el cálculo dos veces por cada > tupla del resultado, entonces reformulo mi pregunta si lo hago así: > select > col_1, > col_2, > fn_funciondeusuario(parametros) *col_result*, > case when fn_funciondeusuario(parametros) > 0 then 'L' else 'D' END > col_4 > from > tablas; > > Postgres calcula 1 o 2 veces por cada tupla? > > Guillermo Villanueva > > > > El 6 de febrero de 2013 11:39, Guillermo E. Villanueva < > guillermo...@gmail.com> escribió: > > Buenos días, gente hay posibilidad de utilizar el resultado de una función > o de un cálculo en la misma consulta para la misma tupla? > por ejemplo > select > col_1, > col_2, > fn_funciondeusuario(parametros) *col_result*, > case when *col_result* > 0 then 'L' else 'D' END col_4 > from > tablas; > > Si lo ejecuto así nomas me dice que no existe la columna col_result, lo > que yo quiero es que no tenga que calcular 2 veces lo mismo. Es posible de > alguna manera? > > Desde ya muchas gracias! > > Guillermo > > > > > > Guillermo Villanueva > <http://ar.linkedin.com/in/guillermovillanueva> > > > > >