用其他行的 SUM() 和 COUNT() 更新一行
Posted
技术标签:
【中文标题】用其他行的 SUM() 和 COUNT() 更新一行【英文标题】:UPDATE a row with the SUM() and COUNT() of other rows 【发布时间】:2013-01-17 12:17:48 【问题描述】:想象两个表格,例如:
t1: id, sum, cnt
t2: id, id_t1, value
我想做这样的查询;
UPDATE t1, t2
SET t1.sum = SUM(t2.value),
t1.cnt = COUNT(*)
WHERE t1.id = t2.id_t1;
查询应该使用t2
的值的总和更新t1.sum
,其中t1.id=t2.id_t1
和t1.count
的行数为t1.id=t2.id_t1
。
但是失败并返回错误:ER_INVALID_GROUP_FUNC_USE: Invalid use of group function
我该怎么做?
【问题讨论】:
【参考方案1】:UPDATE t1 a
LEFT JOIN
(
SELECT id_t1,
SUM(value) totalSum,
COUNT(*) totalCount
FROM t2
GROUP BY id_t1
) b ON a.ID = b.id_t1
SET a.sum = COALESCE(b.totalSum, 0) ,
a.cnt = COALESCE(b.totalCount, 0)
SQLFiddle Demo
【讨论】:
我在使用这个查询时遇到了很多死锁。我怎样才能避免它们? 死锁是什么意思?你能解释一下吗? 我正在使用与服务器的许多并发连接,并且前面的查询是同一张表上的 INSERT。我解决了强制对两个操作使用相同连接的死锁。如果你很好奇,这就是我遇到僵局的地方:piratenpad.org/p/KqIjkA4NUC以上是关于用其他行的 SUM() 和 COUNT() 更新一行的主要内容,如果未能解决你的问题,请参考以下文章