Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requêtes imbriquées pour compter avec deux conditions

Vous devez grouper la colonne infection et (ip &ipc ) différemment puis rejoignez-les en utilisant une sous-requête comme celle-ci :

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

Voir ce SQLFiddle

Remarque : Je pense que la sortie souhaitée est erronée car :

  1. Dans Table3 il n'y a pas d'infection pour ip=6 mais c'est dans votre sortie
  2. infection other est manquant dans votre sortie (à la place, il y a malware )