如果我没有理解错...
SELECT
COUNT(`domainname`) AS 'occ'
,SUBSTRING(`domainname`,LOCATE('.',`domainname`)+1) AS 'domain'
FROM `the_table`
GROUP BY SUBSTRING(`domainname`,LOCATE('.',`domainname`)+1)
HAVING `occ`>1
ORDER BY `occ` DESC,`domain` ASC
该HAVING...
行将过滤掉表中仅出现 1 次的域。
编辑:
代表您的评论发言...因为您无法知道以下示例中的域(除非您根据大量国家代码、域扩展名等测试值)
您无法以编程方式检测到这些。如果您打算依靠扩展名或国家/地区扩展名,那也行不通。您可以做的是进行智能分类并通过您的眼睛挑选那些,除非您采用上述解决方案。
所以,例如,
SELECT
`id`
,`d` AS 'domain'
,IF(CHAR_LENGTH(`d`)-CHAR_LENGTH(REPLACE(`d`,'.',''))=2,
SUBSTRING_INDEX(`d`,'.',1),'') AS 'f1'
,SUBSTRING_INDEX(SUBSTRING_INDEX(`d`,'.',-2),'.',1) AS 'f2'
,SUBSTRING_INDEX(`d`,'.',-1) AS 'f3'
FROM (
SELECT
`id`
,IF(CHAR_LENGTH(`domainname`)-CHAR_LENGTH(REPLACE(`domainname`,'.',''))>2,
SUBSTRING_INDEX(`domainname`,'.',-3),`domainname`) AS 'd'
FROM `the_table`
GROUP BY `d`
) t
ORDER BY `f3`,`f2`,`f1`
可能会帮助你看到它。请注意,您不能将结果分组f2
,f3
因为您可能有
- 示例1.yahoo.com
- example2.yahoo.com
但你可能也有