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

MySQL làm cách nào để không bao gồm các hàng trùng lặp khi tôi sử dụng SUM và COUNT với nhiều INNER JOINS?

Đây là một giải pháp. Trước tiên, hãy giảm tập hợp thành các hàng riêng biệt trong bảng dẫn xuất, sau đó áp dụng GROUP BY cho kết quả đó:

SELECT SUM(case when d.status = 2 then d.value end) as 'val_accepted'
FROM (
  SELECT DISTINCT p.id, p.status, p.value, pc.library_id
  FROM props p
  INNER JOIN p_contents AS pc ON p.id = pc.prop_id
  INNER JOIN contents AS c ON c.id = pc.library_id
  WHERE p.account_id = 3) AS d
GROUP BY d.library_id

Bạn sử dụng DISTINCT(pc.library_id) trong ví dụ của bạn, như thể DISTINCT chỉ áp dụng cho cột bên trong dấu ngoặc đơn. Đây là một quan niệm sai lầm phổ biến. DISTINCT áp dụng cho tất cả các cột của danh sách chọn. DISTINCT không phải là một hàm; nó là một công cụ sửa đổi truy vấn.




  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 thế nào để có được kích thước của cơ sở dữ liệu MySQL?

  2. Bảo vệ tiêm MySQL và các dấu hiệu lỗ hổng khi sử dụng PHP

  3. Độ dài nhận xét bảng trong MySQL

  4. MySQL Chỉ chọn một hàng từ mỗi bệnh nhân được chẩn đoán theo ngày đầu tiên

  5. mysql_connect ():Không thể thực hiện kết nối vì máy mục tiêu đã chủ động từ chối nó