Answer:
with recentsales as
(select distinct od.productid,
p.category
from orderdetails od
join products p on od.productid = p.productid
join orders o on od.orderid = o.orderid
where o.orderdate::timestamp >= current_date - interval '30 days' )
select distinct category,
count(productid) over (partition by category) as distinctartifactssold
from recentsales;