Tengo esta consulta que funciona correctamente en MySQL. Más antecedentes en él here.Convertir la selección de MySQL a PostgreSQL
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
He intentado ejecutarlo en PostgreSQL, y ha fallado con este mensaje de error.
PGError: ERROR: column "c.name" must appear in the GROUP BY clause or be used in an aggregate function
no estaba seguro de lo que esto significaba, así que traté de cambiar "c.id" a "c.name" en el grupo por la cláusula (ambos trabajan en MySQL la misma, asumiendo el nombre de un elemento es único).
Sin embargo esto sólo produce otro error similar
PGError: ERROR: column "c.id" must appear in the GROUP BY clause or be used in an aggregate function
¿Cómo se puede resolver este problema?
Curiosamente, parece que esto ahora está permitido en Postgre 9.1 – you786
¿Se eliminó en Postgre 9.2? Recibo este error por las mismas razones. – Aaron
@ Aaron: no se eliminó, pero funciona solo cuando (se cita la [documentación] (http://www.postgresql.org/docs/current/static/sql-select).html)): _la columna desagrupada depende funcionalmente de las columnas agrupadas, ya que de lo contrario habría más de un valor posible para devolver para una columna desagrupada. Existe una dependencia funcional si las columnas agrupadas (o un subconjunto de las mismas) son la clave principal de la tabla que contiene la columna desagrupada_ –