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