UPDATE t JOIN
(SELECT user, SUM(sales) as toal, COUNT(order) as orders
FROM t
GROUP BY user
) tt
ON t.user = tt.user
SET t.total = tt.total,
t.orders = tt.orders;
update T T1
left join (
select `user`,sum(`sales`) newtotal,count(`order`) neworders
from T
group by `user`
) T2 on T1.`user` = T2.`user`
set T1.total = T2.newtotal,T1.orders = T2.neworders
2条答案
按热度按时间qjp7pelc1#
你可以把它表示为一个单独的
update
查询使用join
:也就是说,这种方法没有真正意义。首先,我想问你是否真的需要这种方法。您的sql非常糟糕,所以我猜您没有尝试优化您正在使用的实际查询。如果您对此感兴趣,可以问另一个问题,包括示例数据、所需结果和您使用的查询。
在这种情况下,提高性能的正常方法是使用一个单独的表,每个用户一行,每个汇总的统计信息一列。您可以使用触发器来维护这个表
update
是的,delete
s、 以及insert
所以数据总是最新的。bbuxkriu2#
尝试使用来自的更新值
left join
(总和+计数)表测试ddl:
结果:
测试演示链接