Re: Como convertir los SELECT que usan AS en otros manejadores a Postrgres

From: Orlando Ramirez <orlan2_r(at)yahoo(dot)com>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Como convertir los SELECT que usan AS en otros manejadores a Postrgres
Date: 2007-05-17 17:07:12
Message-ID: 118177.96954.qm@web52105.mail.re2.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias Jaime, esta es la solucion que estaba buscando, lastima que por problemas de performance no la pueda utilizar.

Resulta que la tabla CUENTAS tiene aproximadamente 25,000 registros y en Sybase este query tarda un par de segundos y aqui resulta eficiente, pero cuando la ejecuto en Postgress tarda mucho tiempo (pasaron 20 minutos y no acababa por lo que lo cancele). Intenten hacer algo similar a esto en una tabla en Postgress del tipo <codigo: cod_cta> - <descripcion: des_cta> que contiene de muchos registros.

select codigo, (select des_cta from TABLA where cod_cta=codigo)
from (select substring(cod_cta,1,8) as codigo from TABLA
where length(cod_cta)>=8) as foo

Gracias tambien a Gabriel Hermes Colina Zambra y Eduardo Arenas por su aporte. En realidad comunidades como esta una bendición para todos.

Saludos

Jaime Casanova <systemguards(at)gmail(dot)com> wrote:
On 5/13/07, Jaime Casanova wrote:
> mi solucion fue poner en el FROM un subquery que obtenga el substring
> y le de el nombre que quieres, el group by es para evitar que se
> repitan los valores. tambien encontre que es mas eficiente hacer un
> join con la misma tabla para obtener la descripcion en vez de con un
> subquery...
>
> viendo el query real que intentas re-escribir veo que el problema es
> mas complejo de lo que habias dicho y por lo tanto segun veo debes
> añadir un subquery mas para el sum... mmm...
>

cuatro dias despues... por fin mi cerebro decidio trabajar y se me
ocurrio la forma de escribir esa consulta (tan obvio ahora, que no se
como no lo vi antes =)

SELECT codigo, (select des_cta from CUENTAS where cod_cta=codigo),
sum(mto_sld)
FROM (select substring(cod_cta from 1 for 8) as codigo, mto_sld
from CUENTAS WHERE length(cod_cta) > 8) as foo
GROUP BY 1, 2;

que es lo mismo que

SELECT substring(cod_cta from 1 for 8) as codigo,
(select des_cta from CUENTAS as foo
where cod_cta=substring(CUENTAS.cod_cta from 1 for 8)),
sum(mto_sld)
FROM CUENTAS
WHERE length(cod_cta) > 8
GROUP BY 1, 2;

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook


---------------------------------
Be a PS3 game guru.
Get your game face on with the latest PS3 news and previews at Yahoo! Games.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-05-17 17:24:11 Re: Como convertir los SELECT que usan AS en otros manejadores a Postrgres
Previous Message decastro 2007-05-17 16:17:59 Estructura contable para BD