我感興趣的是「交叉引用」兩列,並返回的兩條信息:GROUP BY和/或UNION是否合適?或者我應該只使用嵌套的SELECT?
的列是saddr
,daddr
,sbytes
,dbytes
。
我想找到DISTINCT
saddr
與DISTINCT
daddr
匹配它們,然後SUM
的sbytes
和dbytes
。
我也想簡單地找到每daddr
saddr
存在的記錄的計數(給出的daddr
N個記錄匹配這個saddr
)。
對於那些可能對上下文感興趣的人,我使用一個名爲argus的包和它的客戶端rasqlinsert來構建網絡流量數據庫。
感謝,
馬特
[編輯]
的樣本數據:
SELECT saddr,daddr,sbytes,dbytes FROM argus.argus2012K17 limit 5;
'01:80:c2:00:00:0a', '20:fd:f1:74:36:96', 194, 0
'01:80:c2:00:00:0a', '20:fd:f1:74:36:b6', 194, 0
'192.168.100.11', '212.243.210.210', 120, 120
'192.168.100.11', '212.243.210.210', 422, 3667
'192.168.100.23', '99.248.99.240', 132, 0
期望的結果:
saddr, daddr, how many records found where they both exist, sum of all sbytes in these records, sum of all dbytes in these records
'01:80:c2:00:00:0a', '20:fd:f1:74:36:96', 2, 388, 0
'192.168.100.11', '212.243.210.210', 2, 542, 3787
'192.168.100.23', '99.248.99.240', 1, 132, 0
我想我有最troubl e將我的頭圍繞着查詢的「他們都存在」的方面。
[EDIT2]
我已經得出結論,我只是需要花時間閱讀和獲取的GROUP BY理解和執行嵌套查詢得到我想要的信息。但是,如果任何人有任何更多的意見,將不勝感激。
[編輯3] 解決方案:
SELECT saddr, daddr, SUM(sbytes), SUM(dbytes), count(saddr) FROM argus.argus2012K17 GROUP BY saddr, daddr;
返回:
SELECT saddr, daddr, SUM(sbytes), SUM(dbytes), count(saddr) FROM argus.argus2012K17 where saddr='01:80:c2:00:00:0a' GROUP BY saddr, daddr;
'01:80:c2:00:00:0a', '20:fd:f1:74:36:96', 326114, 0, 1681
'01:80:c2:00:00:0a', '20:fd:f1:74:36:b6', 326114, 0, 1681
地獄酵母。
SELECT stime, saddr, daddr, SUM(sbytes), SUM(dbytes), count(saddr) FROM argus.argus2012K17 WHERE stime BETWEEN 1337187600 AND 1337187700 GROUP BY saddr, daddr;
你問什麼更優?還是最可讀?還是最佳做法? – keyser
我想我得到了關於'GROUP BY'的問題,但是我看不到'UNION'在哪裏。 –
謝謝凱瑟。我並不關心可讀性,但最優方法(資源成本方面)和最佳實踐都是擔憂。您的評論意味着有幾種方法可以完成這項工作,這很好,因爲我根本不理解。 – mbrownnyc