2010-12-27 7 views
6

मेरे पास एक रेल 3 ऐप है जो उच्च स्कोर रखता है। मैं इसे हेरोकू पर होस्ट कर रहा हूं जो postgresql को डीबी के रूप में उपयोग करता है।रेल का उपयोग कर PostgreSQL में ग्रुप BY से कैसे संपर्क करें?

मुझे स्कोर तालिका से शीर्ष स्कोर निकालने की आवश्यकता है। तालिका में कॉलम score और user_id हैं। यह निम्नलिखित के साथ mysql में काम कर रहा था:

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

यह प्रत्येक उपयोगकर्ता के शीर्ष स्कोर में शुमार है।

जब मैं Heroku पर एप्लिकेशन शब्दों में कहें, मैं निम्नलिखित psql त्रुटि PGError: ERROR: column "scores.id" must appear in the GROUP BY clause or be used in an aggregate function

मैं चारों ओर पढ़ा है लेकिन एक स्पष्ट उत्तर नहीं मिला, मिलता है। PostgreSQL के साथ काम करने के लिए उपर्युक्त क्वेरी को फिर से बनाने का सबसे इष्टतम तरीका क्या है?

धन्यवाद!

टिम

+0

कर सकता है। स्कोर.इलेक्ट ('DISTINCT ON (user_id) id, user_id, score') ऑर्डर ('user_id, स्कोर डीईएससी')। सीमा (25) और मुझे निम्न त्रुटि मिलती है: "PGError: ERROR: कॉलम id_list.alias_0 नहीं करता है मौजूद लाइन 1: ... id_list.al द्वारा id idlist ऑर्डर ... "। मैं 'id_list' के नाम से एक कॉलम भी नहीं बता रहा हूं, इसलिए मुझे नहीं पता कि यह क्यों आ रहा है। – Tim

उत्तर

2

इसका मतलब है कि आपके चयन क्वेरी "आईडी" स्तंभ का चयन किया जाता है लेकिन खंड द्वारा समूह में शामिल नहीं है। मैं रेल से परिचित नहीं हूं लेकिन क्या यह * या सभी कॉलम का चयन कर सकता है?

0

आप मैं DISTINCT पर उपयोग करने के लिए के रूप में दूसरों के द्वारा कहा गया है कोशिश कर रहा हूँ

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

मैंने कोशिश की लेकिन मुझे एक ही त्रुटि मिल गई। – Tim

+0

मैं उस क्वेरी को देखना चाहता हूं जिसमें त्रुटि मिली है, क्योंकि उस क्वेरी को वहां कोई त्रुटि उत्पन्न नहीं करनी चाहिए। –

+0

स्कोर. चयन ('user_id, स्कोर, अधिकतम (स्कोर)') समूह ('user_id')। सीमा (25) mysql के साथ काम करता है लेकिन postgresql के साथ एक ही त्रुटि को गोली मारता है। – Tim

संबंधित मुद्दे