Ошибка при использовании внутреннего соединения с суммой - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть две (2) таблицы: ps_wk_mp_seller_transaction_history

enter image description here И ps_wk_mp_seller_order_status

enter image description here

Я хочу суммировать seller_amount только если current_state = 5

Для этого я написал это:

select sum(seller_amount) as seller_amount
from ps_wk_mp_seller_transaction_history th inner join 
     ps_wk_mp_seller_order_status os
     on os.id_order = th.id_transaction and
        os.current_state = 5 and
        th.id_customer_seller = 2;

Для id_customer_seller = 2 я получаю это 4984.020000 (4950 + 34.02) и точно

Но я получаю 25.848000 вместо NULL для id_customer_seller= 5

Может ли кто-нибудь помочь мне?

Может быть, вы можете проверить себя, этот код: https://github.com/kulturman/fakerepo

1 Ответ

0 голосов
/ 21 сентября 2018

Во-первых, у ваших записей есть логическая проблема, id_transaction имеют транзакции с одинаковым id_transaction, но разным количеством и state!поэтому транзакция с идентификатором 41, имеющая состояние 5, и поэтому клиент 5 не будет иметь значение NULL, поскольку 41 находится в состоянии 5.

Для исправления этого

идентификатор транзакции должен быть уникальнымидентификатор для каждой транзакции, чтобы различать состояние транзакции и сумму

запрос должен быть таким:

select sum(seller_amount) as seller_amount
from ps_wk_mp_seller_transaction_history th 
left join ps_wk_mp_seller_order_status os 
  on os.id_order=th.id_transaction
where 
  th.id_customer_seller = 2
  and  os.current_state=5 

рабочий пример здесь

...