Mysql 具有通配符的DISTINCT/GROUP BY。SQL

Mysql 具有通配符的DISTINCT/GROUP BY。SQL,mysql,sql,ip,Mysql,Sql,Ip,我的桌子看起来像这样: ip 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 (...) 192.168.1.254 SELECT concat(LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress))), '.0') as ipClassThing, count(1) as numberInClassTypeThing FR

我的桌子看起来像这样:

ip
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
(...)
192.168.1.254
SELECT  concat(LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress))), '.0') as ipClassThing, 
        count(1) as numberInClassTypeThing
FROM    test t
GROUP   BY LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress)))
我试图从表中获得一个结果,告诉我数据库中有哪些类(例如,地址192.168.1.1的结果是192.168.1.0/24或仅192.168.1.0)


使用该数据库可以这样做吗?

您可以这样做:

ip
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
(...)
192.168.1.254
SELECT  concat(LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress))), '.0') as ipClassThing, 
        count(1) as numberInClassTypeThing
FROM    test t
GROUP   BY LEFT(ipAddress, LENGTH(ipAddress) - LOCATE('.', REVERSE(ipAddress)))

基本上,在上面,我们正在寻找最后一个出现的
,只取它前面的字符串部分,然后在末尾加上
.0

使用示例数据/表格:

create table test (ipaddress varchar(50));

insert into test (ipaddress) values ('192.168.1.1');
insert into test (ipaddress) values ('192.168.1.0');
insert into test (ipaddress) values ('192.168.1.55/24');
insert into test (ipaddress) values ('10.1.1.1');
上面的查询给出了结果:

ipClassThing    numberInClassTypeThing
----
10.1.1.0        1
192.168.1.0     3

我假设你所指的“类”,你可能应该指出如果是这样的话,或者如果不是这样的话,你应该指出是正确的。如果是这样的话,你只指出了一个类。一个包含不止一个类的数据集,以及您的预期结果可以帮助其他人更好地理解您的问题。我实际上指的是任何内容。试图忽略192.168.1之后的所有内容。并获得一个与192.168.1.0/24中所有地址相同的值,该值按预期工作。非常感谢。