У меня есть таблица в PostgreSQL, которая выглядит примерно так:
Date Amount Type
2020-01-10 100 A
2020-01-10 150 B
2020-01-10 120 A
2020-01-10 90 B
2020-01-11 80 B
2020-01-11 120 A
2020-01-11 90 B
Я бы хотел запустить запрос, который бы вывел сумму дней, разделенных на основе на тип, а также вычислить итоговое значение, чтобы он вывел что-то вроде этого
Date A_Sum B_Sum Total
2020-01-10 220 240 460
2020-01-11 120 170 290
Код SQL, который я создал до сих пор, работает, но я считаю его очень неэффективным, поскольку он работает в нескольких подзапросах .
SELECT, q.A_Sum, q.B_Sum, q.A_Sum + q.B_Sum AS Total FROM
(
SELECT DISTINCT date,
(SELECT SUM(amount) FROM table WHERE type='A' AND date=t.date) AS A_Sum,
(SELECT SUM(amount) FROM table WHERE type='B' AND date=t.date) AS B_Sum
FROM table t
) q
Есть ли лучший и более эффективный способ получить тот же результат? Как? Как я заметил, выполнение этого запроса обычно занимает значительно больше времени, и я надеялся ускорить его.