【问题标题】:UPDATE a row with the SUM() and COUNT() of other rows用其他行的 SUM() 和 COUNT() 更新一行
【发布时间】: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_t1t1.count 的行数为t1.id=t2.id_t1

但是失败并返回错误:ER_INVALID_GROUP_FUNC_USE: Invalid use of group function

我该怎么做?

【问题讨论】:

    标签: mysql sql sql-update mysql-error-1111


    【解决方案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)
    

    【讨论】:

    • 我在使用这个查询时遇到了很多死锁。我怎样才能避免它们?
    • 死锁是什么意思?你能解释一下吗?
    • 我正在使用与服务器的许多并发连接,并且前面的查询是同一张表上的 INSERT。我解决了强制对两个操作使用相同连接的死锁。如果你很好奇,这就是我遇到僵局的地方:piratenpad.org/p/KqIjkA4NUC
    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多