SQL:计算唯一出现的次数?

Posted

技术标签:

【中文标题】SQL:计算唯一出现的次数?【英文标题】:SQL: Count the number of unique occurrences? 【发布时间】:2017-06-15 14:25:20 【问题描述】:

我有一个 ID 和 IP 地址列表,我想显示一个 ID 与多个 IP 地址关联的次数。

例如:

数据集:

 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 来完成这项工作?

提前致谢!

【问题讨论】:

你可以使用COUNT(DISTINCT IP) 【参考方案1】:

由于您将根据给定列对这些值进行“分组”,因此您可以利用 SQL 的 GROUP BY 函数,该函数允许您根据特定条件创建组,然后对这些单独的组执行聚合操作:

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

以下部分很重要:

GROUP BY - 由于您关心基于 ID 的 IP 地址“组”,因此您需要将您的个人组分成这些组。 COUNT(DISTINCT IpAddress) - 这在单个组的上下文中很重要,因为您想知道组中存在多少“唯一”IP 地址(如果您不关心唯一结果,可以删除 DISTINCT) . HAVING - 由于您正在处理组/聚合,因此您需要使用 HAVING 来指示要包括哪些组(即仅包括具有多个不同 IP 地址的组)

【讨论】:

感谢您的意见。我收到一条错误消息:查询表达式“COUNT(DISTINCT [IP Address])”中的语法错误(缺少运算符)。我做错什么了吗?下面是我的代码: SELECT [Unique ID], COUNT(DISTINCT [IP Address]) FROM Report3 GROUP BY [Unique ID] HAVING COUNT(DISTINCT [IP Address]) > 0;感谢您的帮助 DISTINCT column_name 语法应该在COUNT() 函数中按预期工作,如上所示。您使用的是哪种特定类型的 SQL(即 SQL Server、mysql 等)? 我正在使用访问并单击 SQL 按钮来输入查询。这有什么不同吗? Access 的语法可能与其他风格的 SQL 不同,因为它似乎不支持 COUNT(DISTINCT column_name) 语法,而是必须使用 like this one 方法。您可以尝试在您的 SELECT 语句中使用 COUNT(*) 以查看是否有效(如果您认为现有的 ID 不应该有任何重复的开头)。 hmm 好的,问题是现有的 ID 将在任何有不同 IP 地址的行上重复,所以听起来这可能行不通。我必须找到另一种访问或下载 SQL Server 的方法。谢谢你的建议!【参考方案2】:

您可以通过 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

【讨论】:

如果您仔细阅读 OP 的问题,您会发现您错过了 WHERE 或 HAVING。 @RazvanDumitru:你是对的。我会更新一个有【参考方案3】:

你可以像这样使用GROUP BY

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

【讨论】:

以上是关于SQL:计算唯一出现的次数?的主要内容,如果未能解决你的问题,请参考以下文章

计算不同的出现次数并复制唯一值

使用 Pig Latin 计算唯一值的出现次数

Pandas - 计算并获取列中字符串值的唯一出现次数

SQL:计算输出列上出现的次数并根据出现次数计算一些百分比

根据第一列中的唯一值计算第二列中值的出现次数

SQL 中的唯一访问次数