На псевдонимы столбцов нельзя ссылаться в предложении WHERE
. Это определение языка SQL и верно для всех баз данных.
Типичные решения - использовать подзапрос, CTE или боковое соединение.
В MySQL есть другой обходной путь. Это позволяет использовать предложение HAVING
в неагрегированном запросе. Итак, вы можете использовать:
select o.*,
(select coalesce(sum(units_purchased), 0)
from member_purchase mp
where mp.offer_id = o.id and
mp.is_deleted = 0
) as sold_units
from offer o
where o.partner_uid in ('941e08b6-f801-4656-8906-0a309b88c429') and
o.order_from < '2019-07-01' and
o.order_to > '2019-07-10' and
o.is_deleted = 0
having sold_units < o.servings;