У меня две (2) таблицы: ps_wk_mp_seller_transaction_history
И ps_wk_mp_seller_order_status
Я хочу суммировать sell_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
Прежде всего, ваши записи имеют некоторую логическую проблему, id_transaction
имеют транзакции с одним и id_transaction
же id_transaction
но разные суммы и разные state
! поэтому транзакция с идентификатором 41
имеющим состояние 5
и что клиент 5
не будет равен нулю, поскольку 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
рабочий пример здесь
id_customer_seller=5
когда запрос id_customer_seller=5
и он / она ожидает NULL
. Но вы правы, что id_transaction
покрывает os.current_state=5
для обоих продавцов.
ON
and th.id_customer_seller=?
, должен отфильтровать все записи для случаяid_customer_seller=5
. Поэтому я не могу понять, как вы могли бы получить25.848
в результате в этом случае. Можете ли вы создать макет, который демонстрирует вашу проблему?