Non puoi usare un nome alias in GROUP BY
clausola. Inoltre:perché la sottoquery? Riduce le righe a una per data e contratto, quindi se conti dopo ottieni un conteggio di 1 per ogni coppia scaduta/contratto.
select asofdate, contract, count(*) as mycount
from public.optionsdata
group by asofdate, contract
having count(*) > 1
order by mycount desc;