Ошибка при использовании внутреннего соединения с суммой

0

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

Изображение 174551 И ps_wk_mp_seller_order_status

Изображение 174551

Я хочу суммировать 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

  • 0
    Последний предикат предложения ON and th.id_customer_seller=? , должен отфильтровать все записи для случая id_customer_seller=5 . Поэтому я не могу понять, как вы могли бы получить 25.848 в результате в этом случае. Можете ли вы создать макет, который демонстрирует вашу проблему?
  • 0
    Может быть, вы можете проверить себя, этот код: github.com/kulturman/fakerepo
Показать ещё 3 комментария
Теги:
inner-join
sum

1 ответ

0

Прежде всего, ваши записи имеют некоторую логическую проблему, 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 

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

  • 1
    Проблема OP id_customer_seller=5 когда запрос id_customer_seller=5 и он / она ожидает NULL . Но вы правы, что id_transaction покрывает os.current_state=5 для обоих продавцов.
  • 0
    Спасибо за ваш ответ, но схема не моя. Я пытаюсь настроить сторонний модуль prestashop. Это рынок, когда покупатель размещает заказ, содержащий два товара продавца, модуль создает две строки «ps_wk_mp_seller_order_status». Вы видите, что я имею в виду?

Ещё вопросы

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