このようなもの:
select *
from (
select userid,
letter,
dense_rank() over (partition by userid order by count(*) desc) as rnk
from letters
group by userid, letter
) t
where rnk <= 2
order by userid, rnk;
user
を置き換えたことに注意してください userid
を使用 列に予約語を使用するのは悪い習慣だからです。
SQLFiddleは次のとおりです。