Vous ne pouvez pas utiliser un nom d'alias dans le GROUP BY
clause. D'ailleurs :Pourquoi la sous-requête ? Il réduit les lignes à une par date et contrat, donc si vous comptez après vous obtenez un décompte de 1 pour chaque paire asofdate / contract.
select asofdate, contract, count(*) as mycount
from public.optionsdata
group by asofdate, contract
having count(*) > 1
order by mycount desc;