我有一个包含1.61亿行的巨大表格。表结构为entryid(varchar), dater(date), region(char), detail(varchar), views(int)
,前四列一起作为主键。我想进行以下处理:
detail
包含www.google.com
,www.google.ca
,www.google.uk
,www.facebook.com
,facebook.com
等网址。我想要将来自同一域的行分组,例如,LIKE "%.google.%"
使用google
,LIKE "%.facebook.%" OR LIKE "facebook.%"
使用facebook
就足够了。但是如果更新行,可能会有重复的密钥,如何使用ON DUPLICATE KEY UPDATE
来汇总views
?除LIKE
之外还有更快的方法吗?
我想删除region
列并对行进行分组并将views
求和并插入到新表中。如何在一个命令中执行此操作?
我想按月对行进行分组(并更新views
)。
答案 0 :(得分:0)
试试这个,对于MYSQL,假设对于每个行,详细信息字段看起来像www.something.com。
SELECT
MONTH(dater),
SUBSTRING_INDEX(SUBSTRING_INDEX(detail, '.', 2), -1) as url,
sum(views)
from table
group by
MONTH(dater),
SUBSTRING_INDEX(SUBSTRING_INDEX(detail, '.', 2), -1)
或者您可以使用子查询使其看起来更清洁:
SELECT mth, url, sum(views) from
(
SELECT
MONTH(dater) as mth,
SUBSTRING_INDEX(SUBSTRING_INDEX(detail, '.', 2), -1) as url,
views
from table) subq
group by
mth, url