2010-12-27 11 views
6

Ho un'app Rails 3 che mantiene alti i punteggi. Lo sto ospitando su Heroku che usa postgresql come db.Come affrontare GROUP BY in PostgreSQL usando Rails?

Ho bisogno di estrarre i punteggi migliori dalla tabella dei punteggi. La tabella contiene le colonne score e user_id. Si stava lavorando in MySQL con il seguente:

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

Questo classifica punteggio più alto di ogni utente.

Quando ho messo l'applicazione su Heroku, ottengo il seguente errore psql PGError: ERROR: column "scores.id" must appear in the GROUP BY clause or be used in an aggregate function

ho letto in giro, ma non ho trovato una risposta chiara. Qual è il modo migliore per ricreare la query precedente per lavorare con PostgreSQL?

Grazie!

Tim

+0

Sto cercando di usare DISTINCT ON come già detto da altri. Score.select ('DISTINCT ON (user_id) id, user_id, score'). Order ('user_id, score DESC'). Limit (25) e ottengo il seguente errore: "PGError: ERRORE: colonna id_list.alias_0 non esiste LINEA 1: ... AS id_list ORDINA DA id_list.al ... ". Non sto nemmeno affermando una colonna con il nome di 'id_list', quindi non capisco perché sta arrivando. – Tim

risposta

2

significa che il query di selezione è la selezione della colonna "id", ma non includendolo nel gruppo dalla clausola. Non ho familiarità con i binari ma potrebbe essere selezionato * o tutte le colonne?

0

Puoi fare

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

Ho provato questo ma ottengo lo stesso errore. – Tim

+0

Mi piacerebbe vedere la query che ha generato l'errore, perché quella query non dovrebbe generare alcun errore. –

+0

Score.select ('user_id, score, max (score)'). Group ('user_id'). Limit (25) funziona con mysql ma spara lo stesso errore con postgresql. – Tim