Re: Consulta que me esta complicando bastante

From: "Gustavo" <gustavor(at)intercomgi(dot)net>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, "victor benitez" <vicben(dot)listas(at)gmail(dot)com>
Cc: "PostgreEs" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta que me esta complicando bastante
Date: 2007-09-07 21:49:47
Message-ID: 064e01c7f199$072b7f90$e802a8c0@Maquina
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Otra pregunta relacionada:

Victor me paso esta consulta que me funciona bien:

SELECT r.nivel,count(*),(select count(*) from recurso where nivel <=
r.nivel)
FROM recurso r group by nivel order by 1;

pero me surge la duda sobre si es mas eficiente hacer la consulta anidada o
modelar esto sobre una tabla temporal que en teoria evitaria hacer tnatos
recorridos sobre la tabla recurso) Tengo entendido que select count(*) es
secuencial.

Rompo tanto con la eficiencia porque esta consulta va a ser un posible
cuello de botella de mi aplicacion

gracias y saludos,

----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
To: "Gustavo" <gustavor(at)intercomgi(dot)net>
Cc: "PostgreEs" <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Friday, September 07, 2007 5:10 PM
Subject: Re: [pgsql-es-ayuda] Consulta que me esta complicando bastante

Gustavo escribió:

> Ahora yo quiero hacer una consulta encima que me devuelva por cada nivel
> la
> cantidad de elementos que sean de nivel <= nivel_actual
>
> Resultado
>
> Nivel | Count
> 0 | 1
> 1 | 2
> 2 | 3
> 3 | 4
> 4 | 5
> 5 | 8
> 6 | 16
> 7 | 29
> 8 | 37
> 9 | 40

Eso no es muy facil de hacer. En Oracle y otros tienes una herramienta
que se llama "windowing functions", con lo cual es trivial. Aca en
Postgres (donde esas funciones no estan implementadas) lo puedes hacer
usando una tecnica conocida como "running aggregates". En esta pagina
se explica como:

http://www.varlena.com/GeneralBits/34.php

mira el ultimo articulo, "Running Aggregates in PostgreSQL with
plpython". Tambien lo puedes hacer con plperl. Dicen que en "SQL for
Smarties" (libro de Joe Celko) se explica como hacerlo solo con SQL,
pero no tengo idea como sera.

--
Alvaro Herrera Valdivia, Chile ICBM: S 39º 49' 18.1", W 73º 13'
56.4"
"Ellos andaban todos desnudos como su madre los parió, y también las
mujeres,
aunque no vi más que una, harto moza, y todos los que yo vi eran todos
mancebos, que ninguno vi de edad de más de XXX años" (Cristóbal Colón)

--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.485 / Virus Database: 269.13.8/993 - Release Date: 06/09/2007
15:18

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Arturo Munive 2007-09-07 22:06:07 Re: Consulta que me esta complicando bastante
Previous Message pablo 2007-09-07 21:40:51 hosting para postgres en CHILE