Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SQL:Chọn số lượng nhiều bảng

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ế.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu trọng âm thay vì '' trong mysqli_query

  2. Số lượng mysql của trận đấu regex trên mỗi trường

  3. Cách chọn từ tên bảng động

  4. Kết nối với máy chủ MySQL bằng C ++

  5. Lỗi SQL tôi không thể tìm ra điều này