#mysql #sql
#mysql #sql
Вопрос:
Я хочу получить значение баланса из двух таблиц политики и платежи. Приведенный ниже код MySQL:
SELECT Sum(policy.premium) AS
`total`
,
(SELECT Sum(payments.amount)
FROM payments
WHERE ( payments.date_paid BETWEEN '2019-03-01' AND '2019-03-31' )) AS
`paid`
FROM `policy`
LEFT JOIN payments
ON policy.code = payments.code
WHERE ( policy.st BETWEEN '2019-03-01' AND '2019-03-31' )
AND policy.trn_type = 0
оплаченный столбец возвращает значение null, и как я могу получить разницу между total и paid.
Ответ №1:
Вы можете вычислить 2 значения следующим образом:
select t.total, coalesce(t.paid, 0) paid, (t.total - coalesce(t.paid, 0)) diff from (
select
(select sum(premium) from policy where st between '2019-03-01' and '2019-03-31' and policy.trn_type=0) total,
(select sum(amount) from payments where date_paid between '2019-03-01' and '2019-03-31') paid
) t
Комментарии:
1. (выберите sum (premium) из политики, где st между ‘2019-03-01’ и ‘2019-03-31’ и policy.trn_type=0) и выберите sum (сумма) из payments, где работает date_paid между ‘2019-03-01’ и ‘2019-03-31’, но выберите t.total, т.е.оплаченный, (т.е.total — т.оплаченный) diff из (выберите (выберите sum (premium) из политики, где st между ‘2019-03-01’ и ‘ 2019-03-31’ и policy.trn_type=0) итого (выберите sum (сумма) из платежей, где date_paid между ‘2019-03-01’ и ‘2019-03-31’) оплачено ) t выдает ошибку, близкую к (выберите sum (сумма) из платежей, где date_paid между ‘2019-03-01’ и ‘2019-03-31’) pa
2. я получаю синтаксическую ошибку рядом (выберите сумму из payments, где date_paid между ‘2019-03-01’ и ‘2019-03-31’) pa
3. если оплачено, то значение null diff также возвращает значение null, даже если есть общее, например, total = 1500 оплачено = null diff = null, как мне это исправить? bal также должен быть 1500
Ответ №2:
Оплаченный столбец — это только эта часть:
SELECT SUM(payments.amount)
FROM payments
WHERE payments.date_paid BETWEEN '2019-03-01' AND '2019-03-31'
Если он возвращает null, сначала проверьте, что у вас есть в ваших данных
Комментарии:
1. Спасибо за ваше предложение, оно вернуло значение null, потому что оно вышло за пределы диапазона дат, я изменил даты, и это сработало, однако как мне получить разницу между total и paid?