Một cái gì đó như thế này:
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;
Lưu ý rằng tôi đã thay thế user
với userid
bởi vì sử dụng các từ dành riêng cho các cột là một thói quen xấu.
Đây là SQLFiddle: http://sqlfiddle.com/#!12/ec3ec/1