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

MySQL tham gia và COUNT () trên nhiều bảng

Bạn sẽ cần sử dụng DISTINCT , nhưng bạn cũng cần đếm các ID, không phải các khóa ngoại:

SELECT
    table1.name,
    COUNT(DISTINCT table2.id) AS table2_count,
    COUNT(DISTINCT table3.id) AS table3_count,
    COUNT(DISTINCT table4.id) AS table4_count,
    SUM(table4.size) AS table4_size
FROM table1
LEFT JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN table3 ON table2.id = table3.table2_id
LEFT JOIN table4 ON table3.id = table4.table3_id
WHERE table1.id = 1

Đây là fiddle .

Giải thích: DISTINCT từ khóa loại bỏ tất cả các giá trị trùng lặp dẫn đến một danh sách các giá trị duy nhất.

Nếu bạn chạy truy vấn của mình mà không có COUNT()SUM() , bạn nhận được:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          1          200 
test  1          (null)     (null)     (null) 
test  1          (null)     (null)     (null) 

Vì vậy, nếu bạn thêm COUNT()SUM() , bạn rõ ràng nhận được:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Tuy nhiên, sử dụng DISTINCT với truy vấn của bạn sẽ không hữu ích vì bạn có thể thấy rõ các giá trị trùng lặp, điều này sẽ dẫn đến:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1224 

Bây giờ, nếu bạn chạy truy vấn của tôi mà không có COUNT()SUM() , bạn nhận được:

name  table1_id  table2_id  table3_id  size
test  1          1          1          1024 
test  1          1          2          200 
test  2          (null)     (null)     (null) 
test  3          (null)     (null)     (null) 

Nếu bạn thêm COUNT()SUM() , bạn sẽ nhận được kết quả chính xác giống như truy vấn của bạn:

name  table1_id  table2_id  table3_id  size
test  4          2          2          1224 

Tuy nhiên, vì lần này bạn có các giá trị khác nhau (tức là không phải tất cả đều là 1), nên bây giờ nếu bạn đếm các giá trị duy nhất bằng cách sử dụng DISTINCT , bạn nhận được:

name  table1_id  table2_id  table3_id  size
test  3          1          2          1224 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào tôi có thể sử dụng thực thi để chèn vào MySQL một danh sách các từ điển bằng Python

  2. Lược đồ cơ sở dữ liệu của Wufoo - Bạn sẽ thiết kế nó như thế nào?

  3. mysql - Làm thế nào để nối các chuỗi và chuyển đổi sang ngày các chuỗi?

  4. tiếp theo với cơ sở dữ liệu postgres không hoạt động sau khi di chuyển từ mysql

  5. Nhóm Django MySQL theo ngày với múi giờ