通过求和将多个MySQL记录合并为一个的脚本

时间:2015-08-27 01:31:04

标签: mysql sql database

我是MySQL的新手,但我确信必须有办法做到这一点。我一直在寻找StackOverflow很长一段时间,但还没有找到它。

我有一个MySQL表,它是从一个分析日志文件的多减速器Hadoop MapReduce作业生成的。该表正在支持Ruby-on-Rails应用程序的数据库中使用,它看起来像这样:

perform_async

我正在尝试合并/求和具有相同+----+-----+------+---------+-----------+ | id | src | dest | time | requests | +----+-----+------+---------+-----------+ | 0 | abc | xyz | 1000000 | 200000000 | | 1 | def | uvw | 10 | 300 | | 2 | abc | xyz | 100000 | 200000 | | 3 | def | xyz | 1000 | 40000 | | 4 | abc | uvw | 100 | 5000 | | 5 | def | xyz | 10000 | 100000 | +----+-----+------+---------+-----------+ src的列,但即使在搜索MySQL 5.1文档之后我也无法弄清楚如何做到这一点。

我正在尝试编写一个我可以运行的脚本并在最后获得类似的内容(行的顺序和dest列都不重要):

id

关于如何解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:2)

您无法真正将行组合在一个表中 - 至少不容易。这需要更新和删除。

所以,只需创建另一个表:

create table summary_t as
    select src, desc, sum(time) as time, sum(requests) as requests
    from table t
    group by src, desc;

如果你真的想要这个,请回到原始表,然后使用临时表并重新插入数据:

create temporary table summary_t as
    select src, desc, sum(time) as time, sum(requests) as requests
    from t
    group by src, desc;

truncate table t;

insert into t(src, desc, time, requests)
    select src, desc, time, requests
    from summary_t;

但是,尽管如此,您应该在map-reduce应用程序中添加另一个步骤来完成最终摘要。

答案 1 :(得分:1)

带有Group By聚合的

SUM应该有效

select src, dest, sum(`time`) as `time`, sum(requests) as requests
from yourtable
group by src, dest

答案 2 :(得分:0)

检查此套件是否符合您的需求,创建一个包含列srcdest作为主键的表格以及其他字段,例如totaltimetotalrequest

在现有的tabl上创建INSERT AFTER触发器,使用totaltime和{{1}更新另一个表totalrequestsrc(旧+新) }作为条件的关键。