अगर user_id
प्राथमिक कुंजी है फिर आपको PostgreSQL को अपग्रेड करना होगा; नए संस्करण प्राथमिक कुंजी द्वारा समूहीकरण को सही ढंग से संभालेंगे।
अगर user_id
न तो अद्वितीय है न ही प्रश्न में 'संपत्ति' संबंध के लिए प्राथमिक कुंजी, तो यह क्वेरी अधिक समझ में नहीं आती है, क्योंकि PostgreSQL के पास यह जानने का कोई तरीका नहीं है कि कौन सा estates
. के प्रत्येक स्तंभ के लिए लौटाया जाने वाला मान जहां एकाधिक पंक्तियां समान user_id
साझा करती हैं . आपको एक समग्र फ़ंक्शन का उपयोग करना चाहिए जो कि आप जो चाहते हैं उसे व्यक्त करता है, जैसे min
, max
, avg
, string_agg
, array_agg
, आदि या रुचि के कॉलम को GROUP BY
. में जोड़ें .
वैकल्पिक रूप से आप DISTINCT ON
. का उपयोग करने के लिए क्वेरी को फिर से लिख सकते हैं और एक ORDER BY
यदि आप वास्तव में कुछ मनमानी पंक्ति चुनना चाहते हैं, हालांकि मुझे वास्तव में संदेह है कि इसे ActiveRecord के माध्यम से व्यक्त करना संभव है।
कुछ डेटाबेस - SQLite और MySQL सहित - केवल एक मनमाना पंक्ति चुनेंगे। इसे PostgreSQL टीम द्वारा गलत और असुरक्षित माना जाता है, इसलिए PostgreSQL SQL मानक का पालन करता है और ऐसे प्रश्नों को त्रुटिपूर्ण मानता है।
अगर आपके पास है:
col1 col2
fred 42
bob 9
fred 44
fred 99
और आप करते हैं:
SELECT col1, col2 FROM mytable GROUP BY col1;
तो यह स्पष्ट है कि आपको पंक्ति मिलनी चाहिए:
bob 9
लेकिन fred
. के परिणाम के बारे में क्या ? चुनने के लिए एक भी सही उत्तर नहीं है, इसलिए डेटाबेस ऐसे असुरक्षित प्रश्नों को निष्पादित करने से मना कर देगा। यदि आप महानतम . चाहते थे col2
किसी भी col1
. के लिए आप max
का उपयोग करेंगे कुल:
SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;