MySQL 合并 2 行中的金额

标签 mysql

我想创建一个 sql 语句来更新大量数据。

我有一个像这样的表

id,   transid,   amount,   narative1,  narative 2, total,    active
1     1234       23.2        NULL        NULL        NULL      1
2     1234       120.33      NULL        NULL        NULL      1
3     1235       98.00       NULL        NULL        NULL      1

当有两行具有相同的 transid 时,我需要对它们进行总计,将结果放入具有该 transid 的第一行的总计列中,并将第二个金额放入第一个实例的 naritive2 中,并使第二个不活动.它应该忽略 transid 的单行。

我想做的结果应该是:

id,   transid,   amount,   narative1,  narative 2, total,      active
1     1234       23.2        NULL        120.33      143.53     1     
2     1234       120.33      NULL        NULL        NULL       0
3     1235       98.00       NULL        NULL        NULL       1

我知道一点丁字裤缠绕器但是..

理想情况下,我希望仅在 MySQL 语句中执行此操作。所以我不介意必须执行多个 sql 语句,但我想避免将它连接到 PHP 等。它是一个非常大的数据集。

最佳答案

这将只更新恰好有 2 行的交易(不是 1 也不是 3 或更多)。

UPDATE  mytable mtu
JOIN    (
        SELECT  minid, maxid, mtmin.amount AS minamt, mtmax.amount AS maxamt
        FROM    (
                SELECT  MIN(id) AS minid, MAX(id) AS maxid
                FROM    mytable mti
                GROUP BY
                        transid
                HAVING  COUNT(*) = 2
                ) mt
        JOIN    mytable mtmin
        ON      mtmin.id = minid
        JOIN    mytable mtmax
        ON      mtmax.id = maxid
        ) mts
ON      id IN (minid, maxid)
SET     narative2 = CASE id WHEN minid THEN minamt ELSE NULL END,
        total = CASE id WHEN minid THEN minamt + maxamt ELSE NULL END,
        active = (id = minid)

关于MySQL 合并 2 行中的金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073713/

相关文章:

mysql - 无法连接到 Google Cloud SQL (MySQL) - 未更改设置

php - Mysql - 检查行是否存在

mysql - 速度和性能优化问题: Multiple database model vs single database

c# - RDLC计算运行总计?

MySQL数据汇总技巧——有没有UNGROUP BY?

mysql - 将数据从 excel 文件写入数据库 (mysql) 时出现编码错误

php - $query 不是在 PHP 中执行,而是在 phpMyAdmin 中执行

MySql – 查询以获取上下文结果

mysql - MyIsam 表级锁定/死锁

MySQL查询最新的重复项