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

तिथि के अनुसार अधिक विभाजन के साथ डेटा एकत्र करना

मूल क्वेरी पहले से ही प्रत्येक उपयोगकर्ता के लिए प्रति दिन मूल विवरण प्रदान करती है। उस गणना को दोबारा करने की आवश्यकता नहीं है। बस क्वेरी को CTE टर्म में रैप करें।

मूल क्वेरी द्वारा निर्मित कॉलम यहां दिए गए हैं:

| date       | profit | user_id | amount | percent | total_inv | user_profit |

यह स्पष्ट नहीं है कि आप प्रतिशत के साथ क्या करना चाहते हैं। मुझे नहीं लगता कि किसी को आसानी से एकत्र किया जा सकता है, अगर आपको याद है कि वह मूल्य क्या दर्शाता है।

कुछ इस तरह (total_share के साथ):

WITH query1 AS (
  SELECT s.date, s.profit
       , i.user_id, i.amount, i.percent
       , SUM(i.amount) OVER (PARTITION BY s.date) AS total_inv
       , ROUND(s.profit * (i.percent / 100.0) * i.amount / SUM(i.amount) OVER (PARTITION BY s.date), 2) AS user_profit
       , ROUND((1.0 * i.amount / (SUM(i.amount) over (partition by s.date))) * i.percent, 2) AS user_share
    FROM daily_stats AS s
    JOIN investments AS i
      ON s.date BETWEEN i.start_date AND i.end_date
   WHERE s.date BETWEEN '2021-02-01' AND '2021-02-05'
     )
SELECT date
     , MAX(profit) AS profit
     , MAX(total_inv) AS total_inv
     , SUM(user_profit) AS total_profit
     , SUM(user_share) AS total_share
  FROM query1
 WHERE user_id IN (1, 4)
 GROUP BY date
;

बेला से परिणाम के साथ:

वर्किंग टेस्ट केस:PG V3 के साथ टेस्ट केस

अपना परीक्षण मामला यहां अपडेट किया गया:आपका परीक्षण मामला अपडेट किया गया




  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. पोस्टग्रेज़ के साथ डेटा डालें और विदेशी कुंजियाँ सेट करें

  4. PostgreSQL:किसी अन्य तालिका से सम्मिलित करें

  5. php सिद्धांत में पंक्तियों को लाने के लिए क्वेरी से पोस्टग्रेज करता है