Re: Suma de Campos

From: Sergio Valdes Hurtado <svh(dot)pgsql(at)gmail(dot)com>
To: Sergio Daniel Gomez <sergiogomez(at)tostado(dot)com(dot)ar>
Cc: Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Suma de Campos
Date: 2010-04-16 19:21:48
Message-ID: g2u9032d01f1004161221je9ea3855tcc0051fd20fa6cc6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 15 de abril de 2010 19:26, Sergio Daniel Gomez
<sergiogomez(at)tostado(dot)com(dot)ar> escribió:
> Sergio Daniel Gomez escribió:
>>
>> Sergio Valdes Hurtado escribió:
>>>
>>> Estimados,
>>> Tengo una tabla con la siguiente estructura:
>>>
>>> RBD                    int             -- Es un identificador de
>>> establecimientos educacionales
>>> ano_pago             int             -- Año de pago
>>> mes_pago            int             -- Mes de pago
>>> monto                  int             -- Monto pagado
>>> tip_proc                vachar(1)   -- Identificador de Tipo de
>>> Proceso y puede tener el valor "N" o "S"
>>>
>>> En el caso de que el Tipo de Proceso sea "S",  sólo los meses de Marzo
>>> a Diciembre tienen este tipo de pago, es decir no hay pagos "S" en los
>>> meses de Enero y Febrero.
>>>
>>> Pues bien, me piden un informe que sume los pagos por año por tipo de
>>> Proceso ("N" o "S") y para ello hice la siguiente consulta:
>>>
>>> SELECT rbd, sum(monto)  FROM dbo.orden_pago
>>> where ano_pago =2009
>>> and tip_proc = "S"
>>> group by rbd
>>>
>>> El problema es que ahora me dicen que para este total debo incluir los
>>> meses de Enero y Febrero que tienen tipo de Pago "N" y sumarlo con lo
>>> que se obtiene en la consulta anterior.
>>>
>>> Mi pregunta es si se podrá hacer en una sola consulta?, ya que este es
>>> una base de datos heredada y sólo tenemos accesos de lectura y no
>>> podemos hacer funciones ni tablas temporales
>>>
>>> Saludos cordiales a todos
>>> --
>>> TIP 2: puedes desuscribirte de todas las listas simultáneamente
>>>    (envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
>>>
>> Podría ser ?
>>
>> SELECT rbd, sum(monto)  FROM dbo.orden_pago
>>    where ano_pago =2009
>>    and (tip_proc = "S"
>>       or (tip_proc = "N"
>>           and (mes_pago = "Enero"
>>               or mes_pago = "Febrero")
>>          )
>>    group by rbd
>>
>> --
>> TIP 8: explain analyze es tu amigo
>>
>
> Ups! mes_pago es int, entonces
> SELECT rbd, sum(monto)  FROM dbo.orden_pago
>     where ano_pago =2009
>     and (tip_proc = "S"
>        or (tip_proc = "N"
>            and (mes_pago between 1 and 2)
>           )
>     group by rbd;
>
> suponiendo que enero = 1, febrero = 2, etc.
>
>
Estimados,

tome la idea de Sergio Gómez y al final lo dejé de esta forma

SELECT rbd, sum(monto) FROM dbo.orden_pago
where ano_pago =2009
and (tip_proc = "S"
or (tip_proc = "N"
and mes_pago < 3))
group by rbd;

Fue una gran sorpresa para mi el manejo de los AND y OR anidados

Gracias a todos por sus aportes

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Fernando Aller 2010-04-16 19:37:12 Re: pregunta sobre particionado
Previous Message Jaime Casanova 2010-04-16 19:04:41 Re: pregunta sobre particionado