Получить результаты строк из оператора JOIN with IF

0

У меня есть таблица транзакций:

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  

Но он почему-то не работает. У меня заканчиваются идеи.

Пожалуйста помоги. Спасибо

  • 0
    WHERE идет после INNER JOIN . Разве вы не получаете синтаксическую ошибку?
  • 0
    Вы можете использовать один IF : IF(plans.type = 0 AND plans.status = 1, 0, transactions.amount)
Теги:
mysql-workbench
mysqli
mysql-python

2 ответа

1
Лучший ответ

Ваш запрос 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; 
  • 0
    Оно работает! Большое спасибо!
  • 0
    Я рад, что смог вам помочь
-2
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

Я думаю, вы можете просто достичь этого, используя вышеуказанный запрос

  • 0
    Не просто отправьте код. Вы должны объяснить, в чем была проблема и как вы ее исправили.
  • 0
    Вы удаляете код, который устанавливает total значение 0 plans.type = 0 plans.status = 1 .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню