mysql - 使用分组最大 MYSQL 更新表?

标签 mysql sql

我有一个包含重复 user_ids 的表,与任务和付款具有多对一关系。

我对任务使用了分组最大值来返回任务完成百分比最高的行。不过,我想用同一个表中最高的付款完成统计数据来更新这个新表。

例如:

id    date                 taskid  payid  task_completion  pay_value
4722  2007-11-08 16:20:14  2       3      7.14             0
4722  2007-11-08 16:20:14  3       3      0.00             0
4722  2007-11-08 16:20:14  5       3      0.00             0
4722  2007-11-08 16:20:14  2       6      7.14             40
4722  2007-11-08 16:20:14  3       6      0.00             40
4722  2007-11-08 16:20:14  5       6      0.00             40
4724  2007-11-20 15:32:40  4       7      25.71            105
4726  2008-01-28 11:44:50  7       8      7.14             52
4726  2008-01-28 11:44:50  8       8      34.29            52
4726  2008-01-28 11:44:50  10      8      65.71            52
4726  2008-01-28 11:44:50  7       9      7.14             24
4726  2008-01-28 11:44:50  8       9      34.29            24

因此,我在任务完成时使用了分组最大值来创建一个新表(具有唯一的 ID),如下所示:

id    date                 taskid  payid  task_completion  pay_value
4722  2007-11-08 16:20:14  2       3      7.14             0
4724  2007-11-20 15:32:40  4       7      25.71            105
4726  2008-01-28 11:44:50  10      8      65.71            52

问题在于,对于 id 4722,最高的 pay_value 和 payid 尚未插入到结果表中。

我想在表单中更新此内容(使用此选择):

SELECT 
    s1.payid,
    s1.pay_value,
FROM
    f_tbl s1
        LEFT JOIN
    f_tbl s2 ON s1.cashid = s2.cashid
        AND s1.pay_value > s2.pay_value
WHERE
    s2.cash_id IS NULL
GROUP BY user_id;

但是,似乎不可能根据此查询更新最终表。 我很困惑,谢谢您的帮助。

最佳答案

您需要在 update 中加入join 才能执行此操作。假设您的查询是正确的:

update SummaryTable st cross join
       (SELECT s1.payid, s1.pay_value,
        FROM f_tbl s1 LEFT JOIN
             f_tbl s2
             ON s1.cashid = s2.cashid AND s1.pay_value > s2.pay_value
        WHERE s2.cash_id IS NULL
        GROUP BY user_id
       ) toupdate
    set st.payid = toupdate.payid,
        st.pay_value = toupdate.pay_value
    where st.taskid = 4722;

关于mysql - 使用分组最大 MYSQL 更新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18206959/

相关文章:

MySQL 查询运行失败 - MySQL 错误 : #1064

mysql - 使用 Perl 插入 MySQL

sql - 重写 mysql select 以减少时间并将 tmp 写入磁盘

mysql - 安装mysql时yum事务检查错误

mysql - SQL : Two different queries to merge

php - 如何完成sql查询显示整个月份?

php - 从 ARRAY 中保存 SQL 数据,例如 print_r()

MySQL - 如何执行多重联接查询?

php - 递归php/mysql函数问题

javascript - laravel-自动增加 Id