Поскольку в ваших таблицах слишком много избыточных полей, вам необходимо обеспечить уникальность join key
каждого шага перед вами join
, я думаю, что приведенный ниже SQL вернет вам правильный результат (кстати,предложение with
здесь похоже на подзапрос в SQL, но даст нам лучший и более понятный стиль кода):
with billing_customerproductbill_sum as (
select
bill_id,
product_id,
sum(discounted_price) as discounted_price_sum,
sum(product_qty) as product_qty_sum
from
billing_customerproductbill
group by
bill_id,
product_id
)
,users_usercommission_sum as (
select
bill_id,
product_id,
staff_user_id,
sum(comission_amount) as comission_amount_sum
from
users_usercommission
group by
bill_id,
product_id,
staff_user_id
)
select
u.name,
sum(product_qty_sum) as product_qty,
sum(discounted_price_sum) as discounted_price,
sum(comission_amount_sum) as comission_amount
from
users_staffuser u
join
users_usercommission_sum uc on u.id = uc.staff_user_id
join
billing_customerproductbill_sum bc on uc.bill_id = bc.bill_id and uc.product_id = bc.product_id
group by
u.name