Оригиналната заявка вече предоставя основните подробности на ден за всеки потребител. Няма нужда да преправяте това изчисление. Просто обвийте заявката в CTE термин.
Ето колоните, създадени от оригиналната заявка:
<предварителен код>| дата | печалба | user_id | сума | процент | общо_инв | потребителска_печалба |Не е ясно какво искате да правите с процента. Не мисля, че може лесно да се агрегира, ако си спомняте какво представлява тази стойност.
Нещо подобно (с 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) НАД (ДЯЛЕНИЕ ПО s.date), 2) AS user_profit, ROUND((1.0 * i.amount / (SUM(i. сума) над (разделяне по s.date))) * i.percent, 2) AS user_share FROM daily_stats AS s JOIN инвестиции AS i ON s.date BETWEEN i.start_date AND i.end_date WHERE s.date BETWEEN '2021-02 -01' И '2021-02-05' )ИЗБЕРЕТЕ дата, MAX(печалба) AS печалба, 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) ГРУПИРАНЕ ПО дата;
С резултат от цигулка:
Работещ тестов случай:Тестов случай с PG V3
Актуализирахте своя тестов случай тук:Вашият тестов случай е актуализиран