私があなたを間違って理解していなければ...
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 回しか出現しないドメインを除外します。
編集:
あなたのコメントに代わって話す...次の例ではどれがドメインであるかを知ることができないため(国コード、ドメイン拡張子などの膨大なリストに対して値をテストしない限り)
- domain.co.uk
- subdomain.domain.co
プログラムでそれらを検出することはできません。拡張機能または国の拡張機能に依存することを計画している場合、それも機能しません。あなたができることは、スマートな並べ替えを取得し、目でそれらを選択することです。これは、上記の解決策に取り組まない限りです。
たとえば、
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
結果をand でグループ化できないことに注意してくださいf3
。
- example1.yahoo.com
- example2.yahoo.com
しかし、あなたも持っているかもしれません
- yahoo.com.br
- google.com.br