【问题标题】:SQL: Count the number of unique occurrences?SQL:计算唯一出现的次数?
【发布时间】: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)

标签: sql


【解决方案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;

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    相关资源
    最近更新 更多