Vấn đề là toán học với null và sắp xếp với null (kiểm tra tùy chọn "NULLS LAST" để ghi đè thứ tự mặc định trả về giá trị null trước tiên cho thứ tự giảm dần).
Trong trường hợp của bạn, với các phép nối bên ngoài, nếu người dùng có rất nhiều nhận xét bài viết nhưng không có nhận xét trên diễn đàn, thì, 100 + null =null trong toán học Oracle. Vì vậy, để phép toán hoạt động, bạn cần làm cho null =0. Đó là nơi NVL () xuất hiện (và cũng có tác dụng phụ tuyệt vời là loại bỏ các null khó chịu khỏi tập kết quả của bạn)!
SELECT u.id, u.username, (NVL(COUNT(a.id),0) + NVL(COUNT(f.id),0)) AS rank
FROM site_users u
LEFT JOIN site_articles_comments a ON a.user_id = u.id
LEFT JOIN site_forum_comments f ON f.user_id = u.id
GROUP BY u.username, u.id ORDER BY rank DESC LIMIT :l
Tôi thấy bạn có cả MySQL và Oracle trong thẻ của mình - phần trên là dành cho Oracle. Nếu đối với MYSQL, hãy sử dụng COALESCE (COUNT (), 0) để thay thế.