2010-12-27 14 views
6

Mam aplikację Rails 3, która utrzymuje wysokie wyniki. Hostuję go na Heroku, który używa postgresql jako db.Jak podejść do GROUP BY w PostgreSQL przy użyciu Rails?

Potrzebuję wyodrębnić najlepsze wyniki z tabeli wyników. Tabela ma kolumny score i user_id. To działa w mysql z następujących czynności:

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

To plasuje najlepszy wynik każdego użytkownika.

Kiedy umieścić aplikację na Heroku, otrzymuję następujący błąd PSQL PGError: ERROR: column "scores.id" must appear in the GROUP BY clause or be used in an aggregate function

Czytałem wokół, ale nie znalazłem jednoznacznej odpowiedzi. Jaki jest najbardziej optymalny sposób na odtworzenie powyższej kwerendy do pracy z PostgreSQL?

Dzięki!

Tim

+0

Próbuję użyć DISTINCT ON jak stwierdzono przez innych. Score.select ("DISTINCT ON (id_użytkownika) id, user_id, score"). Order ("user_id, score DESC"). Limit (25) i pojawia się następujący błąd: "PGError: ERROR: column id_list.alias_0 nie istnieje LINIA 1: ... AS id_list ORDER BY id_list.al ... ". Nie mówię nawet o kolumnie z nazwą "id_list", więc nie rozumiem, dlaczego tak się dzieje. – Tim

Odpowiedz

2

To oznacza, że ​​kwerenda wybierająca jest wybór „id” kolumny, ale nie w tym to w grupie przez klauzuli. Nie znam szyn, ale czy może to być wybór * lub wszystkich kolumn?

0

mógłbyś zrobić

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

Próbowałem tego, ale mam ten sam błąd. – Tim

+0

Chciałbym zobaczyć zapytanie, które dostało błąd, ponieważ tamto zapytanie powinno generować brak błędu. –

+0

Score.select ("user_id, score, max (score)"). Group ('user_id'). Limit (25) działa z mysql, ale wywołuje ten sam błąd z postgresql. – Tim