SELECT
r.reason_name,
s.site_name,
COUNT(DISTINCT pr.post_id)
FROM reasons AS r
INNER JOIN posts_reasons AS pr ON r.id = pr.reason_id
INNER JOIN posts AS p ON pr.post_id = p.id
INNER JOIN sites AS s ON p.site_id = s.id
WHERE p.created_at >= '2017-01-01'
GROUP BY r.id, p.site_id
ORDER BY p.site_id ASC, COUNT(DISTINCT pr.post_id) DESC;