Проверьте этот вариант: <br/> <pre><code class="sql">SELECT o.id, o.variant_id,
/* vp.variant_id, */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
vp.quantity AS quantity_result,
sum(vp.quantity) over (partition by vp.variant_id) as sum_by_variant_id -- сумма в пределах партиции variant_id
FROM orders AS o
LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
LEFT JOIN products AS p ON p.id = vp.product_id
LEFT JOIN product_types AS pt ON pt.id = p.type_id
/*WHERE */ and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.</code></pre> <br/> Но скорее всего вот такой вариант пойдет: <br/> <pre><code class="sql">SELECT o.id, o.variant_id,
/* vp.variant_id, */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
sum(vp.quantity) as sum_by_variant_id -- сумма в пределах группировки o.id, o.variant_id
FROM orders AS o
LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
LEFT JOIN products AS p ON p.id = vp.product_id
LEFT JOIN product_types AS pt ON pt.id = p.type_id
/*WHERE */ and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.
group by o.id, o.variant_id /*, vp.variant_id */</code></pre> <br/> PS: Вы уверены в применении left join? Не просто join?