我有一个MySQL数据库,其中包含一个包含MAC地址的表,我想知道有多少组具有相同的制造商(MAC的第一个八位字节)。
我可以选择具有相同三个起始八位字节的mac组:
select `mac` from `t1` where `mac` LIKE 'FC:E9:98%';
但是我必须为每个制造商手动完成。 有没有办法要求从相同的三个八位字节开始的每个不同的mac组,而不必指定它们?
谢谢!
编辑:
谢谢你们快速回答。 这两种解决方案都运行良好:
select left(mac,8) mac , count(1) cnt from t1 group by left(mac, 8);
select count(*),mac from t1 group by SUBSTRING_INDEX(mac,':',3);
我对你的答案投票的声誉仍然太低,但你给我节省了很多时间+1! :)
答案 0 :(得分:3)
这应该有用(虽然LEFT
函数可能只适用于qsl服务器;我不知道,否则使用substring方法。编辑:查找:LEFT
也可用于mysql) 。 LEFT
接受一个字符串和一个int作为参数,返回字符串的第一个(左)字符,其数量由第二个int参数确定。
SELECT LEFT(mac, 8) mac
, COUNT(1) CNT
FROM T1
GROUP BY LEFT(mac, 8)
答案 1 :(得分:1)
您可以使用子字符串获取带有该mac前缀的行数:
select count(*), substring(mac, 1, 8)
from t1
group by substring(mac, 1, 8)
答案 2 :(得分:1)
您可以使用以下答案:
SELECT mac FROM t1 GROUP BY substring(mac, 1, 8);
答案 3 :(得分:0)
选择mac 从t1 由SUBSTRING_INDEX分组(mac,':',3);