mysql 如何计算列表中的 class 个 IP 和 return 具有给定计数的 IP

mysql how to count class A IPs from a list and return those with a given count

我有 table 个 class B IP。
示例 table:

1.1  
1.2  
1.3  
14.2  
14.4  
14.57  
242.10  

每个classA的总记录是随机的,有的少,有的多。
我需要确定 table 中有多少 class As 有 256 个条目(意味着整个 class A 包含在 table 中)。
所以我需要 select 每个 class A in the table like 1.%, 2.%, etc
然后计算该特定 class A
存在多少条记录 然后是 return 个计数为 256 的条目。
示例输出显示 Class A 1、14 和 242 有 256 个条目:
1
14
242
提前致谢。

我认为您可以使用此问题函数用点拆分列数据:
split-value-from-one-field-to-two

SPLIT_STR(class_a, '.', 1) as class_a

或者将第一个参数 (A) 保存在单独的列中,然后在您的查询中使用该列。

然后使用按 'A' class 列分组的计数查询,如下所示:

SELECT *, COUNT(A) AS cnt_a FROM class_a 
GROUP BY COUNT(A)
WHERE COUNT(A) = 256

此查询可能无法很好地执行,因为它无法利用任何现有索引,但它应该可以为您解决问题。在这里,您从原始 IP 地址字段(此处假定名称为 'ip')创建一个 class_a 字段,计算每个 class_a 字段的不同 class b 值的数量值,然后只返回 class b 值的计数 = 256.

的情况
SELECT
    SUBSTRING_INDEX(ip, '.', 1) AS class_a,
    COUNT(DISTINCT ip) as class_b_count
FROM table
GROUP BY class_a
HAVING class_b_count = 256

即使您不在基础 ip 地址字段上强制使用唯一值,这也会起作用。如果您已经有了这个约束,您可以在 COUNT() 函数

中删除 DISTINCT 关键字

不过,我建议您可以将您的 IP 地址拆分成多个部分,如果这是您要定期 运行 的查询,以便您可以利用索引。