2010-12-27 15 views
6

Yüksek puanları tutan bir Rails 3 uygulaması var. Ben db olarak postgresql kullanır Heroku üzerinde barındıyorum.Rails kullanarak PostgreSQL'de GROUP BY'ye nasıl yaklaşılır?

Puan tablosundan en yüksek puanları almam gerekiyor. Tabloda score ve user_id sütunları vardır. Bu aşağıdaki ile mysql çalışıyordu: Bu her kullanıcının üst puanı alıyor

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

. Ben Heroku üzerinde uygulama koymak

, ben etrafında okudum ama net bir yanıt bulamadım PGError: ERROR: column "scores.id" must appear in the GROUP BY clause or be used in an aggregate function

aşağıdaki psql'in hatayı olsun. PostgreSQL ile çalışmak için yukarıdaki sorguyu yeniden oluşturmanın en uygun yolu nedir?

Teşekkürler! senin seçme sorgusu "id" sütununu seçerek ancak maddede tarafından grubunda bunu dahil değil demektir

Tim

+0

yapabilirdi. Score.select ('DISTINCT ON (kullanıcı_kimliği) id, kullanıcı_kimliği, puan') sipariş ('user_id, puan DESC'). Limit (25) ve aşağıdaki hatayı alıyorum: "PGError: HATA: sütun id_list.alias_0 değil mevcut LINE 1: ... AS id_list SİPARİŞ BY id_list.al ... ". Hatta 'id_list' isminde bir sütun belirtmem bile bu yüzden neden gelmiyor. – Tim

cevap

2

. Raylara aşina değilim ama * veya tüm sütunları seçiyor olabilir mi?

0

ben başkaları tarafından belirtildiği gibi DISTINCT ON kullanmaya çalışıyorum

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

Bunu denedim ama aynı hatayı alıyorum. – Tim

+0

Hata olan sorguyu görmek istiyorum, çünkü oradaki sorgu hiçbir hata oluşturmamalıdır. –

+0

Score.select ('user_id, score, max (score)') grup ('user_id'), limit (25) mysql ile çalışır ancak postgresql ile aynı hatayı çeker. – Tim