पर मेरे पास यह क्वेरी है जो MySQL में सही तरीके से काम करती है। here पर अधिक पृष्ठभूमि।MySQL को कनवर्ट करना PostgreSQL
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
मैंने इसे PostgreSQL में चलाने की कोशिश की, और यह इस त्रुटि संदेश में विफल रहा।
PGError: ERROR: column "c.name" must appear in the GROUP BY clause or be used in an aggregate function
मैं इस क्या मतलब यकीन नहीं था, इसलिए मैं खंड (MySQL ही में दोनों काम से समूह में "c.name" से "c.id" बदलते कोशिश की, किसी आइटम के नाम यह सोचते हैं अनोखा है)।
हालांकि यह सिर्फ एक समान त्रुटि
PGError: ERROR: column "c.id" must appear in the GROUP BY clause or be used in an aggregate function
उत्पादित इस समस्या को कैसे हल किया जा सकता?
विचित्र रूप से, ऐसा लगता है कि अब इसे पोस्टग्रे 9.1 – you786
में अनुमति दी गई है क्या इसे पोस्टग्रे 9.2 में हटा दिया गया था? मुझे इसी कारण से यह त्रुटि मिल रही है। – Aaron
@Aaron: इसे हटाया नहीं गया था, लेकिन केवल तभी काम करता है ([दस्तावेज़ीकरण] उद्धृत करना (http://www.postgresql.org/docs/current/static/sql-select।एचटीएमएल)): _ ungrouped कॉलम समूहबद्ध कॉलम पर कार्यात्मक रूप से निर्भर है, क्योंकि अन्यथा एक समूह रहित कॉलम के लिए वापस आने के लिए एक से अधिक संभावित मान होंगे। एक कार्यात्मक निर्भरता मौजूद है यदि समूहबद्ध कॉलम (या इसके सबसेट) तालिका के प्राथमिक कुंजी हैं, जिसमें समूह रहित समूह_ –