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

एक सम्मिलित तालिका कॉलम का विशिष्ट योग प्राप्त करें

परिणाम प्राप्त करने के लिए सबक्वायरी के बिना , आपको उन्नत विंडो फ़ंक्शन ट्रिकरी का सहारा लेना होगा:

SELECT sum(count(*))       OVER () AS tickets_count
     , sum(min(a.revenue)) OVER () AS atendees_revenue
FROM   tickets   t
JOIN   attendees a ON a.id = t.attendee_id
GROUP  BY t.attendee_id
LIMIT  1;

sqlfiddle

यह कैसे काम करता है?

इसे समझने की कुंजी है घटनाओं का क्रम क्वेरी में:

एग्रीगेट फ़ंक्शंस -> विंडो फ़ंक्शंस -> DISTINCT -> LIMIT

अधिक विवरण:

  • LIMIT लागू होने से पहले परिणाम गणना प्राप्त करने का सबसे अच्छा तरीका

कदम दर कदम:

  1. मैं GROUP BY t.attendee_id - जो आप आम तौर पर एक सबक्वेरी में करते हैं।

  2. फिर मैं टिकटों की कुल संख्या प्राप्त करने के लिए गणना करता हूं। बहुत कुशल नहीं है, लेकिन आपकी आवश्यकता से मजबूर है। कुल कार्य count(*) विंडो फ़ंक्शन में लपेटा गया है sum( ... ) OVER () गैर-सामान्य अभिव्यक्ति पर पहुंचने के लिए:sum(count(*)) OVER ()

    और डुप्लीकेट के बिना राशि प्राप्त करने के लिए प्रति सहभागी न्यूनतम राजस्व का योग करें।

    आप max() . का भी उपयोग कर सकते हैं या avg() के बजाय min() revenue . के समान प्रभाव के लिए प्रति सहभागी की प्रत्येक पंक्ति के लिए समान होने की गारंटी है।

    यह आसान हो सकता है यदि DISTINCT विंडो फ़ंक्शंस में अनुमति दी गई थी, लेकिन PostgreSQL ने (अभी तक) इस सुविधा को लागू नहीं किया है। प्रति दस्तावेज़:

    <ब्लॉककोट>

    सामान्य समग्र कार्यों के विपरीत, कुल विंडो फ़ंक्शन, DISTINCT . की अनुमति नहीं देते हैं या ORDER BY फ़ंक्शन तर्क सूची में उपयोग करने के लिए।

  3. अंतिम चरण एक पंक्ति प्राप्त करना है। यह DISTINCT . के साथ किया जा सकता है (एसक्यूएल मानक) चूंकि सभी पंक्तियां समान हैं। LIMIT 1 हालांकि तेज होगा। या SQL-मानक फ़ॉर्म FETCH FIRST 1 ROWS ONLY



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं एक कॉलम कैसे जोड़ सकता हूं जो पोस्टग्रेस्क्ल डेटाबेस में नल की अनुमति नहीं देता है?

  2. फ़ंक्शन पैरामीटर सूचियां कैसे प्राप्त करें (इसलिए मैं एक फ़ंक्शन छोड़ सकता हूं)

  3. Psql में, कुछ कमांड का कोई प्रभाव क्यों नहीं पड़ता है?

  4. PostgreSQL स्ट्रीमिंग प्रतिकृति बनाम तार्किक प्रतिकृति

  5. UNION, EXCEPT, या INTERSECT का उपयोग करते समय PostgreSQL में 'ERROR:  कॉलम "colname" मौजूद नहीं है' ठीक करें