分组和更新大型数据库表

时间:2012-01-30 18:59:52

标签: mysql sql

我有一个包含1.61亿行的巨大表格。表结构为entryid(varchar), dater(date), region(char), detail(varchar), views(int),前四列一起作为主键。我想进行以下处理:

  1. detail包含www.google.comwww.google.cawww.google.ukwww.facebook.comfacebook.com等网址。我想要将来自同一域的行分组,例如,LIKE "%.google.%"使用googleLIKE "%.facebook.%" OR LIKE "facebook.%"使用facebook就足够了。但是如果更新行,可能会有重复的密钥,如何使用ON DUPLICATE KEY UPDATE来汇总views?除LIKE之外还有更快的方法吗?

  2. 我想删除region列并对行进行分组并将views求和并插入到新表中。如何在一个命令中执行此操作?

  3. 我想按月对行进行分组(并更新views)。

1 个答案:

答案 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