Try something like:
count(p.id) as "Posts",
round(sum(p.score) / count(p)) as "Average Score per Post"
FROM posts p
JOIN users u ON u.id = p.user_id
WHERE p.created_at >= CURRENT_DATE - INTERVAL '3 month'
AND u.id != -1
GROUP by user_id, u.views, u.id
HAVING count(p.id) > 25
ORDER BY sum(p.score) / count(p) DESC
It uses the post score, which takes into account likes, plus other positive behaviours around a user’s post (replies, bookmarking etc).
The above query shows the top 25 users by average post score over the last three months. Only considers those who posted more than 25 times.