Π·Π°ΠΏΡΠΎΡ ΠΈΠ· Π±Π°Π·Ρ postgresql. Π’Π°ΠΊΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Ρ Π·Π°Π΄Π°ΡΠΊΠ°, Π³Π΄Π΅ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· sql Π·Π°ΠΏΡΠΎΡ - ΡΡΠΌΠΌΡ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠΎΠ² ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΠΈ Π½Π°ΡΠ°ΡΡΠ°ΡΡΠΈΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΌ ΠΈΡΠΎΠ³ΠΎΠΌ, Π²ΠΎΡ Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ Π΄Π²Π° ΡΡΠΈΡ
ΠΏΠΎΠ»Ρ deposit amount ΠΈ withdrawal amount ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡ. Π¦Π΅Π½Π° ΠΈ ΡΡΠΎΠΊΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΡ ΠΠΎΡ ΡΠ΅ΠΊΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ SELECT “userId“, coalesce(sum(tr.amount) FILTER (WHERE tr.type = 'deposit') over (partition by type, tr.“userId“ order by tr.“createdAt“ rows between unbounded preceding and current row), 0) as depositAmount, coalesce(sum(tr.amount) FILTER (WHERE tr.type = 'withdraw') over (partition by type, tr.“userId“ order by tr.“createdAt“ rows between unbounded preceding and current row), 0) as withdrawAmount FROM “transactions“ “tr“ GROUP BY tr.“userId“, tr.amount, tr.type, tr.“createdAt“; Π’ΡΡ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ Π·Π° ΡΠ°Π· ΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ-ΡΠΎ ΠΎΠ΄Π½ΠΎ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΎΠ³ ΠΏΠΎ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΡ, Π»ΠΈΠ±ΠΎ ΠΏΠΎ Π²ΡΠ²ΠΎΠ΄Ρ, Π° Π½ΡΠΆΠ½ΠΎ ΠΈ ΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΎΠ΅. Π’ΠΎΠ΅ΡΡΡ Π΅ΡΠ»ΠΈ Π½Π΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π° Π½Π΅ ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»Π΅ ΠΏΡΡΡΡΠΌ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΡΠΌ 0.