2010-12-27 18 views
6

Tengo una aplicación Rails 3 que mantiene puntajes altos. Lo estoy alojando en Heroku, que usa postgresql como db.¿Cómo abordar GROUP BY en PostgreSQL usando Rails?

Necesito extraer los puntajes más altos de la tabla de puntajes. La tabla tiene columnas score y user_id. Que estaba trabajando en MySQL con lo siguiente:

Score.order('score DESC').group('user_id').limit(25)

Esto sitúa puntuación más alta de cada usuario.

Cuando puse la aplicación en Heroku, me sale el siguiente error psql PGError: ERROR: column "scores.id" must appear in the GROUP BY clause or be used in an aggregate function

He leído por ahí, pero no he encontrado una respuesta clara. ¿Cuál es la forma más óptima de volver a crear la consulta anterior para que funcione con PostgreSQL?

Gracias!

Tim

+0

Estoy intentando utilizar DISTINCT ON como se ha dicho por otros. Score.select ('DISTINCT ON (user_id) id, user_id, score') order ('user_id, score DESC'). Limit (25) y me aparece el siguiente error: "PGError: ERROR: column id_list.alias_0 does not existe LÍNEA 1: ... AS id_list ORDER BY id_list.al ... ". Ni siquiera estoy indicando una columna con el nombre de 'id_list', así que no entiendo por qué está por venir. – Tim

Respuesta

2

Eso significa que su consulta de selección es la selección de la columna "ID", pero no incluirla en la cláusula group by. No estoy familiarizado con los rieles, pero ¿podría estar seleccionando * o todas las columnas?

0

podrías hacer

select id, max(score) group by id; 
+0

Intenté esto pero me sale el mismo error. – Tim

+0

Me gustaría ver la consulta que obtuvo el error, porque esa consulta no debería generar ningún error. –

+0

Score.select ('user_id, score, max (puntuación)'). Group ('user_id'). Limit (25) funciona con mysql pero dispara el mismo error con postgresql. – Tim