PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL -ग्रुप बाय क्लॉज में दिखाई देना चाहिए या एक समग्र फ़ंक्शन में उपयोग किया जाना चाहिए

अगर 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में प्रति पंक्ति केवल एक बार आस्थगित ट्रिगर निष्पादित करें

  2. पोस्टग्रेज:त्रुटि:कैश्ड योजना को परिणाम प्रकार नहीं बदलना चाहिए

  3. PostgreSQL - IN खंड में अधिकतम पैरामीटर?

  4. डेटाबेस को हटा नहीं सकता

  5. Postgresql 9.2 pg_dump संस्करण बेमेल