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:计算唯一出现的次数?的主要内容,如果未能解决你的问题,请参考以下文章