From: | Emiliano Moscato <moski666(at)gmail(dot)com> |
---|---|
To: | Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Usando GROUP BY |
Date: | 2009-03-05 12:29:41 |
Message-ID: | 4388f4180903050429j32241f02lcc34cd4361905d90@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Moski
2009/3/4 Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>:
> 2009/3/4 Emiliano Moscato <moski666(at)gmail(dot)com>:
>> Hola a todos!
>>
>> Cada tanto me encuentro con el mismo tipo de problema haciendo queries
>> en postgres. Supongamos que tenemos el ejemplo del tutorial de
>> Postgres (http://www.postgresql.org/docs/8.1/static/tutorial-agg.html)
>>
>> SELECT city, max(temp_lo)
>> FROM weather
>> GROUP BY city;
>>
>> city | max
>> ---------------+-----
>> Hayward | 37
>> San Francisco | 46
>> (2 rows)
>>
>> pero además querría saber en que fecha ocurrió dicha temperatura. Cuál
>> sería la manera "más correcta" de hacerlo?
>>
>
> en que fecha o en que "fechas"... el hecho de que haya habido una
> temperatura maxima no significa que haya ocurrido una sola vez...
Sí, me alcanzaría con que muestre todos los dias en que apareció la máxima.
>
>> En mis tiempos de Mysql hacía algo del estilo, haciendo uso de los
>> abusos del standard por parte de MYSQL:
>>
>> SELECT city, max(temp_lo), date
>> FROM weather
>> GROUP BY city;
>>
>
> lo cual claramente es incorrecto porque no estas definiendo que fecha
> del grupo deseas obtener (es decir del grupo de veces en que en city
> llego a haber temp_lo temperatura)
En mi ejemplo original habrá una sola "temperatura" máxima. Claramente
el ejemplo es una abstracción, quizás no la más feliz.
>
>> pero en Postgres,si hago esto, me reclama que date no debe estar en el
>> group by.
>
> sera que te reclama que "debe" estar?
exacto, error mío.
>
>> Claramente, esto no sería útil, dado que al ponerlo en el
>
> define "util"
Útil sería un resultado que no me muestre las temperaturas de TODAS
las ciudades en TODAS las fechas, dado que el máximo ya no me daría la
máxima por ciudad sino que me daría la máxima por ciudad y por día.
Esto claramente no es lo que enuncié al principio, que es saber qué
días ocurrió la máxima.
>
>> group by, me desagrega la maxima temperatura de la ciudad por dias.
>>
>
> en realidad lo agrupa por ciudad y fecha... no lo desagrega... ah!
> bueno, eso es semantica!!!
Gracias por la ironía.
>
>> Cuál sería la manera correcta de hacer este query?
>>
>
> solo llego hasta aqui, no se me ocurre forma de filtrarlo mas... mas
> que con una funcion...
>
> SELECT city, date, temp_lo
> FROM weather
> WHERE (city,temp_lo) IN (SELECT city, max(temp_lo)
> FROM weather
> GROUP BY city)
>
Esta está buena, yo quería evitar un subquery, pero veo que no será
posible. De todas maneras, conociendo que solo tendré un resultado por
ciudad en el subquery no se si es lo más eficiente.
Gracias por responder, fue útil a pesar de tus ironías.
Moski
From | Date | Subject | |
---|---|---|---|
Next Message | Emiliano Moscato | 2009-03-05 12:32:53 | Re: Usando GROUP BY |
Previous Message | Cesar Erices | 2009-03-05 12:07:34 | Re: Ayuda para PL/pgsql |