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

एक ही तालिका से दो प्रश्नों को घटाएं

SELECT b.name, a.*, a.sum2 - a.sum3 AS diff
FROM  (
    SELECT id
         , sum(CASE WHEN value_type = 2 THEN value::int END) AS sum2
         , sum(CASE WHEN value_type = 3 THEN value::int END) AS sum3
    FROM   data
    WHERE  id = 1
    AND    value_type IN (2, 3)
    AND    dayhour >= '2015-12-12 0:0'::timestamp
    AND    dayhour <  '2015-12-13 0:0'::timestamp
    GROUP  BY 1
    ) a
JOIN   device b USING (id);
  • मान लें dayhour डेटा प्रकार टाइमस्टैम्प का है (सूचना अनुपलब्ध है)। कास्ट टू डेट मूल अनुक्रमणिका को अक्षम कर देगा। इसलिए मैंने इसे एक sargable में बदल दिया। विधेय अधिक विवरण:
  • कास्ट क्यों करें value::int ?
  • पहले एग्रीगेट करें, फिर डिवाइस से जुड़ें। सस्ता।



  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 फ़ंक्शंस के अंदर psql वैरिएबल के लिए कोई एस्केपिंग सिंटैक्स है?

  2. PostgreSQL विंडोज़ में नाम संसाधित करता है

  3. कॉलम के बिना चयन क्यों मान्य है

  4. एक ट्रिगर फ़ंक्शन में निष्पादित करने के लिए पुराने, नए और पहचानकर्ताओं को कैसे पास करें?

  5. SQL कॉलम नाम और उनकी तुलना PostgreSQL में किसी अन्य तालिका में पंक्ति रिकॉर्ड से करना