Как выбрать сумму конкретного идентификатора в запросе выбора MySQL, Beego - PullRequest
0 голосов
/ 15 мая 2019

Я хочу получить такой результат, как

result 
-------------------------------------------------------
id | uuid | user_id |created_date |    amount    | name 
-------------------------------------------------------
1  | ABC  |    1    |   2019/5/1  |      5       | xa
2  | PQR  |    2    |   2019/5/5  |      150     | xb

Запрос, который я пытаюсь использовать

SELECT(SELECT SUM(paid_amount) WHERE ID = t1.**HERE**) AS sub1,
(t1.amount - sub1) AS sub2
FROM invoice t1 CROSS JOIN
invoice_paid t2;

Структура таблицы в моей БД

table invoice_paid        
------------------------------------
id | uuid | paid_date | paid_amount
------------------------------------
1  | ABC  | 2019/5/1  | 15
2  | ABC  | 2019/5/5  | 80 

table invoice
-------------------------------------------------------
id | uuid | user_id |created_date |    amount    | name 
-------------------------------------------------------
1  | ABC  |    1    |   2019/5/1  |      100     | xa
2  | PQR  |    2    |   2019/5/5  |      150     | xb

Iможно использовать только условие суммирования 1, например, где id = 1, но как мне объединить этот запрос в запросе выбора с запросом соединения.Я использую Beego (Голанг), MariaDB

1 Ответ

1 голос
/ 15 мая 2019

Вы можете использовать этот запрос.Он присоединяет таблицу invoice к производной таблице из SUM s всех сумм, уплаченных за счет из invoice_paid, вычитая эту сумму из суммы счета-фактуры, чтобы получить непогашенную сумму:

SELECT i.id, i.uuid, i.user_id, i.created_date, i.amount - COALESCE(p.amount, 0) AS amount, i.name
FROM invoice i
LEFT JOIN (SELECT uuid, SUM(paid_amount) AS amount
           FROM invoice_paid
           GROUP BY uuid) p ON p.uuid = i.uuid
ORDER BY i.id

Вывод:

id  uuid    user_id created_date        name    amount
1   ABC     1       2019-05-01 00:00:00 xa      5
2   PQR     2       2019-05-05 00:00:00 xb      150

Демонстрация на dbfiddle

...