Calculos con ventana

From: Jorge Tornero <jtorlistas(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Calculos con ventana
Date: 2015-09-02 16:28:46
Message-ID: CAEHjKAvnV-zo8TaL7fY=tOY5Fv=NQMKh6b9gP7y+iZXE92S5uQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Estimados co-listeros:

Estoy teniendo problemas con una función de agregación y unos cálculos con
ventanas.

El caso es que estoy intentando hacer unos cálculos en los cuales uso unas
funciones de ventana para obtener una vista materializada (Posgtresql 9.4).
En otros casos (incluso dentro de la consulta que os adjunto), funcionan
perfectamente. No entiendo por qué ahora, en la consulta final no me da el
resultado esperado.

Por si fuera suficiente, ya que la consulta es larga, en primer lugar os
pongo un resumen de la consulta, por si a primera vista algo "chillara".
También os digo que es muy probable que esta no sea la mejor manera de
obtener lo que quiero... pero hasta aquí llego... ideas son bienvenidas:

Resumen:

Create materialized view XXX as(

WITH subconsulta2 as

(

WITH SUBCONSULTA1 as(Consulta con funcion ventana)

SELECT (VARIOS CAMPOS DE SUBCONSULTA1 Y OTROS CON CALCULOS, ETC)

)

select CAMPOS DE SUBCONSULTA2 CON FUNCIONES VENTANA

La consulta completa, en la que el cálculo de porc_energia no es correcto
es:

DROP materialized VIEW IF EXISTS param_eval;

CREATE MATERIALIZED VIEW param_eval as(
with previo_param as (
with tm as (
select
camp,
barcod,
lance,
espcod,
ncien,
numero,
((ctalla+0.25)*numero)/sum(numero) over (partition by
camp,barcod,lance,espcod,ncien) as talla

from tallas_final_sinsexo
where numero!=0
group by camp,barcod,lance,espcod,ncien,ctalla,numero)

select
tm.camp,
tm.barcod,
evalcod,
tm.lance,
tm.espcod,
tm.ncien,
sum(tm.numero) as numero,
round(sum(talla),3) as tmedia,
10^((b_par+m_par*log(sum(talla)))/10)::numeric(9,8) as mbsc
from
tm, ts_eval
where
tm.camp=ts_eval.camp and
tm.espcod=ts_eval.espcod

group by
tm.camp,tm.barcod,evalcod,tm.lance,tm.espcod,ts_eval.m_par,ts_eval.b_par,ncien)

select
camp,
barcod,
evalcod,
lance,
espcod,
ncien,
tmedia,
numero,
mbsc,
(numero*mbsc)/sum(mbsc) over (partition by camp,barcod,evalcod,lance) as
porc_energia <---AQUI ESTÁ EL PROBLEMA

from previo_param
group by camp,barcod,evalcod,lance,espcod,ncien,tmedia,numero,mbsc
order by camp,barcod,evalcod,lance,ncien);

Muchísimas gracias por vuestra ayuda, un saludo y feliz vuelta del verano
(o invierno a gente del hemisferio sur)

Jorge Tornero

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jorge Tornero 2015-09-02 17:13:09 Calculos con ventana
Previous Message Guillermo E. Villanueva 2015-09-02 15:37:21 Re: [pgsql-es-ayuda] consulta con pg_query lentísima