我有一张这样的桌子(C,Sqlite)。我想计算每个IP地址联系的唯一端口的数量。
id | ip_src | ip_dst | port
-----------------------------------
1 | 192.168.45.3 | ... | 442
2 | 132.43.13.4 | ... | 42
3 | 111.5.34.3 | ... | 80
4 | 54.2.2.1 | ... | 8322
5 | 54.2.2.1 | ... | 8322
6 | 192.168.45.3 | ... | 80
7 | 192.168.45.3 | ... | 23
查询的结果最好看起来像这样:
192.168.45.3 = 3
132.43.13.4 = 1
111.5.34.3 = 1
54.2.2.1 = 1
这个查询会是什么样的?
我试过了:
SELECT src_ip, COUNT(DISTINCT port) FROM synpackets;
但它没有给出正确的结果,它似乎只计算第一个IP地址。
答案 0 :(得分:1)
首先获得独特的端口非常重要。因此,您必须嵌套两个select语句,如下所示:
SELECT T.ip_src AS ip_src,
Count(T.ports) AS numberPorts
FROM (SELECT DISTINCT ip_src, ports FROM <TABLE>) AS T
GROUP BY T.ip_src;
在内部select语句中,结果都是唯一的ip_src和端口对。使用此记录集,我们可以计算端口。记住GROUP BY
。
否则我们将无法获得唯一的端口数。
答案 1 :(得分:0)
这样的事情应该有效
SELECT src_ip,COUNT(*)FROM synpackets group by src_ip,port;