mysql合并记录及两表比较
原表中有许多维度的细粒度记录,如domain,status,time三者共同作为Key,但是有需要查询所有domain的某时间状态数据,此时由于记录太多,查询速度非常慢,所以有需要将表进行降维,即消除domain维度,将Key变为status+time的二维。
降维
降维的操作可以用到group by
和sum
.
group by
会以time+status为id对所有记录进行分类,使用聚合函数sum则可以将同类数据相加,还可按需使用max
,min
等函数从而达到降维目的。
比较
查询到数据之后,需要将其更新到新表中,但只需要更新新增项和数据有修改的项。此时需要用到left join
。left join
顾名思义以左为准,即只要在左表出现,右表即使为空也会出现在结果中,因此特别查找适合“新增”项。
写入
最后就是如何将查询结果插入到新表中,直接insert into
查询结果即可,但是需要注意一项,即已存在的表项不要重复插入,而是更新即可,此时需要使用 on duplicate key update
。
完整的语句应该是