From: | "Guillermo O(dot) Burastero" <linux(dot)gb(at)gmail(dot)com> |
---|---|
To: | "Lista de PostgreSQL en Español" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Group by de mysql a postgresql |
Date: | 2011-11-18 11:15:14 |
Message-ID: | CAEKEwfkd-Rqbxp_QwK=kdJ1=pzXimy9xibxdDDAWU_6OWT5tew@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola
Tu consulta es en general irresoluble y desde el punto de vista
semántico ambigua.
El agrupamiento implica obtener UN SOLO REGISTRO por CADA DIFERENTE
CLAVE DE AGRUPAMIENTO, por lo tanto en la salida SOLO PUEDEN estar los
campos de la clave de agrupamiento o FUNCIONES DE AGREGADO SOBRE LAS
DEMÁS COLUMNAS. Ej suma o promedio de expresiones numéricas sobre las
demás columnas
Si tengo tabla tPagos (idPersona, fecha, pago) y quiero saber la
totalidad de los pagos por persona (idPersona) hago
SELECT idPersona, summ (pago) from tPagos GROUP by idPersona ORDER by idPersona
Fijate que NO TENDRÍA SENTIDO si hiciera porque una misma persona
puede tener pagos en diferentes fechas.
SELECT idPersona, fecha, summ (pago) from tPagos GROUP by idPersona
ORDER by idPersona
Si en cambio tiene sentido:
SELECT idPersona, fecha, summ (pago) from tPagos GROUP by idPersona,
fecha ORDER by idPersona, fecha
en donde cada registro de salida tiene la suma de todos los pagos
hechos a una persona en una determinada fecha (ya que fecha es también
campo de agrupamiento).
Mirá: http://www.postgresql.org/docs/9.1/static/sql-select.html#SQL-GROUPBY
2011/11/18 felipe fernandez <ffdezrguez(at)gmail(dot)com>:
> Hola
> Estoy migrando una base de datos de una web de mysql a postgresql. Los datos
> ya están pero las querys que tiene group by son un dolor de cabeza.
> Un ejemplo
> SELECT users.id, users.username, users.email, users.realname
>
> FROM follow la
> JOIN users ON users.id = la.user_id
> WHERE users.deleted = 0
> GROUP BY users.id
> ERROR: column "users.username" must appear in the GROUP BY clause or be
> used in an aggregate function
> LÍNEA 1: SELECT users.id, users.username, users.email, users.realnam...
> He probado a poner DISTINCT quitando el GROUP BY pero el resultado es
> erróneo porque muestra TODAS los registros.
> ¿Existe alguna manera de que sólo se puede agrupar por un único campo del
> select?
>
>
> --
> Salu2
>
> Felipe Fernández Rguez
> "Uno se alegra de resultar útil" Andrew Martin "El hombre bicentenario"
> Isaac Asimov.
> "Documentation is like sex: when it is good, it is very, very good; and when
> it is bad, it is better than nothing."
>
--
Guillermo O. Burastero
Usuario GNU/Linux #84879 - http://counter.li.org/
Bahía Blanca, Buenos Aires, Argentina
Tel. +54 (291) 454-6132 - Móvil [15] 574-3173
MSN: guillermo(dot)burastero(at)gmail(dot)com
ICQ: 97148268
From | Date | Subject | |
---|---|---|---|
Next Message | felipe fernandez | 2011-11-18 11:20:31 | Re: Group by de mysql a postgresql |
Previous Message | felipe fernandez | 2011-11-18 09:34:53 | Group by de mysql a postgresql |