我是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
关于如何解决这个问题的任何想法?
答案 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)
检查此套件是否符合您的需求,创建一个包含列src
和dest
作为主键的表格以及其他字段,例如totaltime
和totalrequest
。
在现有的tabl上创建INSERT AFTER
触发器,使用totaltime
和{{1}更新另一个表totalrequest
和src
(旧+新) }作为条件的关键。