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

Các truy vấn lồng nhau để được tính với hai điều kiện

Bạn cần nhóm cột infection và (ip &ipc ) khác nhau sau đó kết hợp chúng bằng cách sử dụng truy vấn phụ như sau:

SELECT t1.ip, t1.isp, t2.infection, t1.ipc, t1. ispc, t2.incount
FROM
    (SELECT ip, isp, infection, COUNT(ip) as ipc, COUNT(isp) as ispc
    FROM (
       SELECT ip, isp, infection
       FROM tbl1
       UNION ALL
       SELECT ip, isp, infection
       FROM tbl2
       UNION ALL
       SELECT ip, isp, infection
       FROM tbl3
       )x
     GROUP BY ip, isp) t1
JOIN
    (SELECT ip, isp, infection, COUNT(infection) as incount
     FROM (
       SELECT ip, isp, infection
       FROM tbl1
       UNION ALL
       SELECT ip, isp, infection
       FROM tbl2
       UNION ALL
       SELECT ip, isp, infection
       FROM tbl3
       )x
    GROUP BY ip, isp,  infection)t2
ON t1.ip = t2.ip
ORDER BY ip, isp, infection Desc

Xem SQLFiddle này

Lưu ý: Tôi nghĩ rằng đầu ra mong muốn của bạn là sai vì:

  1. Trong Table3 không có infection cho ip=6 nhưng nó nằm trong đầu ra của bạn
  2. infection other bị thiếu trong đầu ra của bạn (thay vào đó là malware )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách tạo đồng hồ đếm ngược cho trang web đấu thầu

  2. Đang cài đặt lại Wamp Server mà không thay thế cơ sở dữ liệu mysql hiện có

  3. Hibernate:Tạo bảng Mysql InnoDB thay vì MyISAM

  4. Chèn cơ sở dữ liệu php không hoạt động theo kế hoạch

  5. Cách sửa lỗi java.sql.SQLException:Không tìm thấy cột 'id'. lỗi trong Spring Boot