вариант 1 (с оконными функциями):
select distinct p.blog_id, p.text, count(w.blog_id) over (partition by w.blog_id) from oc_blog p, oc_blog_comment w where w.blog_id = p.blog_id order by 3 desc limit 5;
вариант 2 (с пред. подсчётом):
select p.blog_id, p.text, t.count from oc_blog p, (select blog_id, count(blog_id) from oc_blog_comment group by blog_id ) t where p.blog_id=t.blog_id order by t.count desc limit 5;
Первый вариант на моей выборке раза в 3 медленнее, в нём оконная функция выполняется для каждой строки.
Второй вариант к тому же удобнее в будущем ограничивать, например, статьи не старше месяца, запихнуть во внутренний селект.
ПыСы, лимит исключительно для удобства.