MySQL-合并具有相同键和相同键的行的列值

时间:2018-08-14 20:38:43

标签: mysql sql database

这是我使用的表中的键的描述屏幕快照: Table keys

表中的每一行代表特定客户在特定时间的购买行为。 因此,典型的行如下所示: typical row(截图)

我需要合并两个客户数据,因此,一个客户每小时将在其行中汇总所有购买价值。

我要执行的伪代码是:

  

对于每小时(行),添加具有以下内容的行的“购买金额”   客户端ID为“ 518”的所有行的客户端ID为“ 526”

起初,我尝试执行此操作,但是由于表中配置了多个键,因此出现了错误:

npm install fabric-client

由于客户端“ 518”已经有相同时间的行,因此我无法执行上述查询来创建新行。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您将需要三个查询: 如果两个客户的记录都具有相同的时间值,则可以求和:

update purchase p1 
    inner join purchase p2 on p2.client_id=528 and p2.date=p1.date
set p1.amount = p1.amount + p2.amount
where p1.client_id=526;

第二个用于处理只有一个(而不是将继续存在)的记录:

insert into purchase 
    (select 526, date, amount 
     from purchase p1 
     where p1.client_id=528 and 
        not exists (select * 
                    from purchase p2 
                    where p2.client_id=526 and 
                          p2.date=p1.date));

请注意-上面的操作也可以使用更新查询来完成(更优雅)。

最后一个删除合并记录的查询:

delete from purchase where client_id=528;

注意-我始终使用client_id值526和528-您可能需要更改这些数字以适合您的目的。