Re: Group by de mysql a postgresql

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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