Kueri asli sudah memberikan detail dasar per hari untuk setiap pengguna. Tidak perlu mengulang perhitungan itu. Cukup bungkus kueri dalam istilah CTE.
Berikut adalah kolom yang dihasilkan oleh kueri asli:
| date | profit | user_id | amount | percent | total_inv | user_profit |
Tidak jelas apa yang ingin Anda lakukan dengan persen. Saya tidak berpikir bahwa seseorang dapat dengan mudah digabungkan, jika Anda ingat apa yang diwakili oleh nilai itu.
Sesuatu seperti ini (dengan 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
;
Dengan hasil dari biola:
Kasus uji yang berfungsi:Kasus uji dengan PG V3
Perbarui kasus uji Anda di sini:Kasus uji Anda diperbarui