Nice! Should be easy to do max instead of count. Then top instead of max. Then top3 breaks the model.
# select * from
(select count from (select count(y.i), y.d from y group by y.d) _ limit 2) b,
(select count(y.i), y.d from y group by y.d) a;
count | count | d
-------+-------+---
1 | 1 | 2
2 | 1 | 2
1 | 2 | 1
2 | 2 | 1
(4 rows)top3 - max 3 values in the group