आप SELECT *
. को मिला नहीं सकते GROUP BY some_column
. के साथ पोस्टग्रेज में (जब तक कि some_column
पीके है), क्योंकि यह एक विरोधाभास है। सभी गैर-एकत्रित कॉलम (SELECT
. में प्रयुक्त) , HAVING
या ORDER BY
क्लॉज एक एग्रीगेट फंक्शन के बाहर) GROUP BY
. में होना चाहिए सूची - जहां प्राथमिक कुंजी स्तंभ किसी तालिका के सभी स्तंभों को प्रतिस्थापित कर सकता है। वरना यह अपरिभाषित है कौन सा कुल सेट से चुनने के लिए मूल्य।
प्रति दस्तावेज़:
<ब्लॉकक्वॉट>
जब GROUP BY
मौजूद है, या कोई समग्र कार्य मौजूद है, यह SELECT
. के लिए मान्य नहीं है कुल कार्यों के अलावा या जब असमूहीकृत स्तंभ कार्यात्मक रूप से समूहीकृत स्तंभों पर निर्भर होता है, तो असमूहीकृत स्तंभों को संदर्भित करने के लिए सूची अभिव्यक्तियाँ, क्योंकि अन्यथा एक असमूहित स्तंभ के लिए लौटने के लिए एक से अधिक संभावित मान होंगे। एक कार्यात्मक निर्भरता मौजूद होती है यदि समूहबद्ध स्तंभ (या उसके उपसमूह) समूहबद्ध स्तंभ वाली तालिका की प्राथमिक कुंजी हैं।
<उप>एक निश्चित अन्य आरडीबीएमएस यहां गंदी चाल चलने और इसे अनुमति देने और मनमाने मूल्यों को चुनने के लिए जाना जाता है... उप>
ऐसा लगता है कि आप नवीनतम . के साथ टिप्पणी करने वाले अद्वितीय रोगियों की सूची चाहते हैं प्रत्येक टिप्पणी करें। Postgres में सबसे आसान तरीका DISTINCT ON
. के साथ है :
SELECT DISTINCT ON (patient_id) *
FROM comments
WHERE clinician_id = $1
ORDER BY patient_id, created_at DESC NULLS LAST;
लेकिन यह SQLite के साथ नहीं उड़ेगा - जो शुरू में लूप में नहीं होना चाहिए:
- SQLite3 "LIKE" या PostgreSQL "ILIKE" के लिए सामान्य रूबी समाधान?
NULLS LAST
केवल तभी प्रासंगिक है जब created_at
शून्य हो सकता है:
- डेटाटाइम एएससी द्वारा पोस्टग्रेएसक्यूएल सॉर्ट करें, पहले शून्य?
DISTINCT ON
. के लिए विवरण :
- समूह द्वारा प्रत्येक समूह में पहली पंक्ति का चयन करें?