Sqlite - 基于列计算唯一值

时间:2015-04-08 15:11:02

标签: c++ mysql sqlite

我有一张这样的桌子(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地址。

2 个答案:

答案 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;