2016-09-05 3 views
1

IP 흐름 데이터가있는 테이블이 있습니다MySQL이 동일한 테이블의 열로 연결

SRC_IP | SRC_BW | DST_IP | DST_BW

대부분의 IP 주소는 한 번에 또는 다른 열에 나타나지만 일부는 SRC 또는 DST로만 표시됩니다. 고유 한 IP 목록을 얻으려고 노력 중이며 (연결 원본 또는 대상과 관계없이) 대역폭을 합산하려고합니다.

내가 현재 가지고 :

SELECT SRC_IP, SRC_BYTES, DST_BYTES, SRC_BYTES + IFNULL(DST_BYTES,0) as TOTAL_BYTES 
FROM 
    (SELECT INET6_NTOA(bro_conn.CONN_ORIGH) as SRC_IP, 
      SUM(bro_conn.CONN_ORIGIPBYTES) AS SRC_BYTES 
    FROM bro_conn GROUP BY SRC_IP) src 
LEFT JOIN 
    (SELECT INET6_NTOA(bro_conn.CONN_RESPH) as DST_IP, 
      SUM(bro_conn.CONN_RESPIPBYTES) AS DST_BYTES 
    FROM bro_conn GROUP BY DST_IP) dst 
ON src.SRC_IP = dst.DST_IP 

내 문제는 주소 만이 ..... 목록에 의견을 표시하지 않습니다하는 DST_IP로 나타나는 경우가?

답변

0

당신은 조건 aggreggationUNION ALL을 사용하고 LEFT JOIN 작업을 제거 할 수 :

SELECT IP AS SRC_IP, 
     SUM(CASE WHEN Type = 'SRC' THEN BYTES ELSE 0 END) AS SRC_BYTES, 
     SUM(CASE WHEN Type = 'DST' THEN BYTES ELSE 0 END) AS DST_BYTES, 
     SUM(BYTES) AS TOTAL_BYTES 
FROM (
    SELECT INET6_NTOA(bro_conn.CONN_ORIGH) as IP, 
     SUM(bro_conn.CONN_ORIGIPBYTES) AS BYTES, 
     'SRC' AS Type 
    FROM bro_conn 
    GROUP BY SRC_IP 

    UNION ALL 

    SELECT INET6_NTOA(bro_conn.CONN_RESPH) as IP, 
     SUM(bro_conn.CONN_RESPIPBYTES) AS BYTES, 
     'DST' AS Type 
    FROM bro_conn GROUP BY DST_IP) AS t 
GROUP BY IP 
관련 문제