Начните с объединения их всех вместе:
select c.id
from customers c
left join invoices i on i.customer_id = c.id
left join lineitems li on li.invoice_id = i.id
group by c.id
Чтобы отфильтровать клиентов с более чем 5 позициями или более, добавьте:
having count(li.id) >= 5
Фильтрация клиентов с двумя или более счетами сложнее, так как мы присоединяемся к таблице lineitems. В одном счете может быть несколько строк. Таким образом, чтобы считать только уникальные счета, мы должны добавить к счету distinct
, например:
having count(distinct i.id) >= 2
Чтобы отфильтровать клиентов с количеством товара более 100 долларов, добавьте:
having sum(li.cost) > 100
Вы можете использовать математику внутри sum
, если вы храните отдельные позиции и цены:
having sum(li.itemcount * li.itemcost) > 100