У меня есть таблица транзакций:
id user amount plan_id
1 1 11 1
2 1 9 2
3 1 10 2
4 2 10 3
5 1 7 4
6 1 5 4
7 1 6 5
8 3 3 8
7 1 7 5
И таблица "планов":
plan_id type status
1 0 0
2 1 1
3 1 0
4 1 0
5 0 1
Мне нужно получить сумму сумм за каждый plan_id, указанный в "транзакциях". Однако, если тип "0", а статус "1" в таблице "планы" для конкретного plan_id, тогда ТОЛЬКО в этом случае сумма вернет "0".
Так вот что будет возвращено:
plan_id earnings
1 11
2 19
4 12
5 0 // it should be 13, but because type=0 and status=1, sum returns 0
до сих пор я имею:
SELECT t.plan_id,
SUM( IF( p.type = 0 and p.status = 1 , 0, t.amount ) ) as earnings
FROM transactions as t
WHERE t.user = 1
INNER JOIN plans as p ON t.plan_id=p.plan_id;
GROUP BY t.plan_id
Но он почему-то не работает. У меня заканчиваются идеи.
Пожалуйста помоги. Спасибо
Ваш запрос SQL имеет синтаксическую ошибку, так как вы использовали предложение WHERE между JOIN.
Я изменил ваш запрос SQL и нашел ожидаемый результат, если я прав.
SELECT t.plan_id,
SUM(IF(p.TYPE = 0
AND p.status = 1, 0, t.amount)) AS earnings
FROM transactions AS t
inner join plans AS p
ON t.plan_id = p.plan_id
WHERE t.USER = 1
GROUP BY t.plan_id;
SELECT t.plan_id, sum(t.amount) as total
FROM plans as p
inner join transactions as t on (p.plan_id = t.plan_id)
where t.user = 1
group by t.plan_id
Я думаю, вы можете просто достичь этого, используя вышеуказанный запрос
total
значение 0
plans.type = 0
plans.status = 1
.
WHERE
идет послеINNER JOIN
. Разве вы не получаете синтаксическую ошибку?IF
:IF(plans.type = 0 AND plans.status = 1, 0, transactions.amount)