我有一个MySQL表,其中包含一列格式正确的URL。我想获得列中唯一域名的表格,以及每个域名出现的次数。是否有可以执行此操作的MySQL查询?
我想做的事......
SELECT COUNT(*)
FROM log
GROUP BY url REGEXP "/* regexp here */"
...但这不起作用,因为REGEXP返回0或1而不是匹配的内容。
答案 0 :(得分:5)
要返回某个域的计数:
SELECT SUM(url REGEXP '^http://example.com')
FROM log
不幸的是,MySQL
没有在regexp上返回匹配的字符串。
如果您的日志记录始终如http://example.com/*
,则可以发出:
SELECT SUBSTRING_INDEX(url, '/', 3), COUNT(*)
FROM log
GROUP BY
1
答案 1 :(得分:2)
如果它们是完整形成的网址,您可以先replace("http://", "")
并在/
所以
http://www.domain.com/page.aspx
会变成
www.domain.com
我不确定替换的MySQL语法,但在MSSQL中它会是。
DECLARE @url nvarchar(50)
SET @url = 'http://www.domain.com/page.aspx'
SELECT LEFT(REPLACE(@url, 'http://', ''), CharIndex('/', REPLACE(@url, 'http://', '')) - 1)
从这里你可以获得所有域名的子表,然后对它们进行计数/分组。
SELECT
Count(*),
DomainOnly
FROM
(
SELECT
LEFT(REPLACE(urlColumn, 'http://', ''), CharIndex('/', REPLACE(urlColumn, 'http://', '')) - 1) as DomainOnly
FROM
TABLE_OF_URLS
) as Domains
GROUP BY
DomainOnly
答案 2 :(得分:0)
如果您通过域名表示TLD(因此您希望将www.example.com
,corp.example.com
,www.local.example.com
和example.com
统计为一个域,那么正则表达式会是:
'[[:alnum:]-]+\.[[:alnum:]-]+/'
我假设这是格式良好的网址,格式为schema://host/[path]