2017-06-15 88 views
1

我有一个ID和IP地址列表,我想显示一个ID与多个IP地址相关联的次数。SQL:计算唯一出现次数?

例如:

数据集:

ID  IP Address 
123 1.1.1.1 
123 2.2.2.2 
456 3.3.3.3 
456 4.4.4.4 
456 5.5.5.5 

预期输出:

ID Count of Distinct IP addresses 
123 2 
456 3 

我怎样才能做到这一点使用SQL?

在此先感谢!

+2

你可以使用'COUNT(DISTINCT IP)'。 –

回答

2

既然你将要“组团”的基础上给定列的这些值,你可以把SQL的GROUP BY功能的优点是,可以让你按照特定标准创建组,然后对这些单个组执行集合操作:

SELECT ID, 
     COUNT(DISTINCT IpAddress) 
    FROM YourTable 
GROUP BY ID 
    HAVING COUNT(DISTINCT IpAddress) > 1 

fo llowing部分是很重要的:

  • GROUP BY - 既然你所关心的基于ID的IP地址“组”,你需要将自己的个人组分成这些群体。
  • COUNT(DISTINCT IpAddress) - 这在个人群组环境中很重要,因为您需要知道群组中存在多少“唯一”IP地址(如果您不关心唯一结果,则可以删除DISTINCT )。
  • HAVING - 既然你正在处理组/汇总信息,您将需要使用HAVING,表示要包括哪些群体(即只包括具有多个不同的IP地址组)
+0

感谢您的意见。我收到一条错误消息: 查询表达式'COUNT(DISTINCT [IP Address])'中的语法错误(缺少运算符)。 我做错了什么?以下是我的代码: SELECT [唯一ID],COUNT(DISTINCT [IP地址]) FROM Report3 GROUP BY [唯一ID] HAVING COUNT(DISTINCT [IP Address]))> 0; 我感谢您的帮助 – user2946613

+0

'DISTINCT column_name'语法应该如上所示在COUNT()函数中按预期工作。你使用了哪些特定的SQL(即SQL Server,MySQL等)? –

+0

我正在使用访问并单击SQL按钮以键入查询。这有什么区别吗? – user2946613

1

你可以通过id来计算不同的ip地址。就像这样:

SELECT ID,COUNT(DISTINCT IPAddress) AS nbr FROM table GROUP BY ID 

更新

SELECT ID,COUNT(DISTINCT IPAddress) AS nbr 
FROM table 
GROUP BY ID 
HAVING COUNT(DISTINCT IPAddress) > 1 
+0

如果您仔细阅读OP的问题,您会发现您错过了WHERE或HAVING。 –

+0

@RazvanDumitru:你说得对。我会更新一个有 – Arion

0

您可以使用GROUP BY是这样的:

SELECT ID,COUNT(*) 
FROM table_name 
GROUP BY ID;