PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Агрегиране на данни с OVER PARTITION по дата

Оригиналната заявка вече предоставя основните подробности на ден за всеки потребител. Няма нужда да преправяте това изчисление. Просто обвийте заявката в 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

Актуализирахте своя тестов случай тук:Вашият тестов случай е актуализиран




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА:актуализиране или изтриване на потребители на таблица нарушава ограничението за външен ключ fk_rails_03de2dc08c на коментари в таблица

  2. Опции за отказване на клъстер с пълна база данни за няколко облака за PostgreSQL

  3. Как да чета citext поле на postgresql с npgsql 3.0.0?

  4. Как Acos() работи в PostgreSQL

  5. Как да опитате няколко SELECT, докато резултатът е наличен?