Из where убрать дополнительное условие фильтрации, и добавить его же в case в count.
Тогда count будет отбивать именно статистику по условиям фильтрации (считается все, что выходит из case не null), но занулять там, где условия не выполняются.
...
count(
case
when 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')
)
then 1
end
)
...
PS: Подзапросы Any можно вынести в секцию With, если они дают однотипную выборку и используются во многих местах.