Nie możesz użyć nazwy aliasu w GROUP BY
klauzula. Poza tym:Dlaczego podzapytanie? Zmniejsza wiersze do jednego na datę i umowę, więc jeśli policzysz później otrzymujesz liczbę 1 dla każdej pary asofdate/umowa.
select asofdate, contract, count(*) as mycount
from public.optionsdata
group by asofdate, contract
having count(*) > 1
order by mycount desc;