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

PG::त्रुटि:SELECT DISTINCT, ORDER BY एक्सप्रेशन चुनिंदा सूची में दिखना चाहिए

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मैं अभी अपने सिर में एक छोटे से उदाहरण के माध्यम से चला गया जिसने मुझे यह समझने में मदद की कि पोस्टग्रेस के पास कॉलम द्वारा चयन डिस्टिंट/ऑर्डर पर यह अजीब प्रतिबंध क्यों है।

कल्पना कीजिए कि आपकी रुपयेवीपी तालिका में निम्न डेटा है:

 event_id |        start_time
----------+------------------------
    0     | Mar 17, 2013  12:00:00
    1     |  Jan 1, 1970  00:00:00
    1     | Aug 21, 2013  16:30:00
    2     |  Jun 9, 2012  08:45:00

अब आप उनके संबंधित start_times द्वारा आदेशित विशिष्ट event_ids की एक सूची प्राप्त करना चाहते हैं। लेकिन 1कहां होना चाहिए जाओ? क्या यह पहले आना चाहिए, क्योंकि एक टपल 1 जनवरी, 1970 को शुरू होता है, या 21 अगस्त, 2013 के कारण यह अंतिम होना चाहिए?

चूंकि डेटाबेस सिस्टम आपके लिए वह निर्णय नहीं ले सकता है और क्वेरी का सिंटैक्स उस वास्तविक डेटा पर निर्भर नहीं हो सकता है जिस पर वह काम कर रहा हो (event_id मानते हुए) अद्वितीय है), हम केवल SELECT . के कॉलम द्वारा ऑर्डर करने तक ही सीमित हैं खंड।

वास्तविक प्रश्न के लिए - मैथ्यू के उत्तर का एक विकल्प MIN . जैसे समग्र कार्य का उपयोग कर रहा है या MAX छँटाई के लिए:

  SELECT event_id
    FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)

start_time . पर स्पष्ट समूहीकरण और एकत्रीकरण डेटाबेस को परिणाम टुपल्स के स्पष्ट क्रम के साथ आने की अनुमति दें। हालांकि, ध्यान दें कि इस मामले में पठनीयता निश्चित रूप से एक मुद्दा है;)



  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. Postgres में ब्लॉब डेटाटाइप का उपयोग कैसे करें

  3. CS50:LIKE ऑपरेटर, % विस्तार के साथ परिवर्तनशील प्रतिस्थापन

  4. Postgresql enum क्या फायदे और नुकसान हैं?

  5. कमांड लाइन तर्कों का उपयोग करके PostgreSQL .sql फ़ाइल चलाएँ