मूल क्वेरी पहले से ही प्रत्येक उपयोगकर्ता के लिए प्रति दिन मूल विवरण प्रदान करती है। उस गणना को दोबारा करने की आवश्यकता नहीं है। बस क्वेरी को 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 के साथ टेस्ट केस
अपना परीक्षण मामला यहां अपडेट किया गया:आपका परीक्षण मामला अपडेट किया गया