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

महीने के प्रत्येक दिन के लिए महीने का कुल मूल्य निर्दिष्ट करें

demos:db<>fiddle

SELECT
    s1.sales_date,
    s1.country,
    s1.sales_volume,
    s2.fix_costs
FROM sales s1
JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None' 
    AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)

आपको एक प्राकृतिक स्व-जुड़ने की आवश्यकता है। शामिल होने की शर्तें हैं:

  1. पहली तालिका बिना None रिकॉर्ड (s1.country <> 'None' )
  2. दूसरी तालिका केवल None रिकॉर्ड (s2.country = 'None' )
  3. तारीख:केवल वर्ष और महीने के हिस्से पर विचार करें, दिनों को अनदेखा करें। यह date_trunc() का उपयोग करके दोनों तालिकाओं की तिथियों को महीने के पहले तक सामान्य करके प्राप्त किया जा सकता है . तो, उदा. '2020-02-15' परिणाम '2020-02-01' और '2020-02-29' परिणाम '2020-02-01' भी, जो तुलना और जॉइन कंडीशन के रूप में अच्छी तरह से काम करता है।

वैकल्पिक रूप से :

SELECT
    *
FROM (
    SELECT
        sales_date,
        country,
        sales_volume,
        SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
    FROM sales 
) s
WHERE country <> 'None'

आप SUM() . का उपयोग कर सकते हैं date_trunc() . के समूह पर विंडो फ़ंक्शन जैसा ऊपर वर्णित है। फिर आपको None . फ़िल्टर करने की आवश्यकता है रिकॉर्ड बाद में



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DecimalField शून्य को 0E-10 . में कनवर्ट करता है

  2. SQL LIMIT WHERE क्लॉज के साथ

  3. PG::ग्रुप बाय क्लॉज में त्रुटि

  4. यूपीएसईआरटी परीक्षण कोड में सिंटेक्स त्रुटि

  5. यदि कोई मेल नहीं खाता है तो पहले रिकॉर्ड का चयन करें