Слева запрос считает все имеющиеся фасеты (опции) товаров. Справа считает доступные фасеты согласно условиям фильтрации.
Как переписать запрос справа, чтобы не вошедшие опции остались в выборке с нулями ?
Запрос и подсчет всех фасетов
--get facets
select
pp.attr_alias,
pp.option_value,
pp.option_alias,
count(pp.option_value)
from "Products" p
JOIN "Product_properties" pp ON pp.prod_id = p.id
WHERE p.cat_id = 1
GROUP BY pp.attr_alias, pp.option_value, pp.option_alias
Запрос и подсчет отфильтрованных фасетов
--get filtered facets
select
pp.attr_alias,
pp.option_value,
pp.option_alias,
count(pp.option_value)
from "Products" p
JOIN "Product_properties" pp ON pp.prod_id = p.id
WHERE
p.cat_id = 1
AND
p.id = ANY (
SELECT prod_id
FROM "Product_properties" pp
WHERE pp.attr_alias = 'ram' AND pp.option_alias IN ('2gb','3gb','4gb','8gb')
)
AND
p.id = ANY (
SELECT prod_id
FROM "Product_properties" pp
WHERE pp.attr_alias = 'storage' AND pp.option_alias IN ('16gb','128gb')
)
GROUP BY pp.attr_alias, pp.option_value, pp.option_alias