【问题标题】:mysql subquery to sum like checknumbersmysql 子查询求和,如校验码
【发布时间】:2015-03-14 23:30:33
【问题描述】:

我有两张表,一张带有 id 和我正在检查重复项的字段连接,另一张带有 id 和所有其他分类数据,其中一项是 AmountPaid。以下查询:

Select
i.id,
i.CheckNumber,
AmountPaid
from
HS i where i.id in (
SELECT id
FROM HS_dups
WHERE concatckBatch IN (SELECT *
      FROM (SELECT concatckBatch
      FROM HS_dups
      GROUP BY concatckBatch
      HAVING COUNT(concatckBatch) > 1) AS a) AND concatckBatch != '')

给了我这个答案:

id  checkNumber amount
15  1114392      1708.5
16  1114392      1432.2
17  1114392      1188.06
18  1114392      1405.25
19  1114392      603.96

我需要它给我这个答案,它是所有相同的支票号码和对应的id的总和:

id  checkNumber amount
15  1114392     6337.97
16  1114392     6337.97
17  1114392     6337.97
18  1114392     6337.97
19  1114392     6337.97

我尝试了各种子查询,但由于某种原因我遇到了困难。

已编辑:感谢 jpw,这是正确答案:

Select
    i.id,
    i.CheckNumber,
    i2.AmountPaid
from
HS i join (
    select 
       checknumber, 
       sum(amountpaid) AmountPaid 
    from HS 
where id in (
       SELECT id
       FROM HS_dups
       WHERE concatckBatch IN (
          SELECT *
          FROM (
             SELECT concatckBatch
             FROM HS_dups
             GROUP BY concatckBatch
             HAVING COUNT(concatckBatch) > 1
          ) AS a
       ) AND concatckBatch != ''
    )
    group by checknumber) i2 on i2.checkNumber = i.checkNumber
where 
    i.id in (
       SELECT id
       FROM HS_dups
       WHERE concatckBatch IN (
          SELECT *
          FROM (
             SELECT concatckBatch
             FROM HS_dups
             GROUP BY concatckBatch
             HAVING COUNT(concatckBatch) > 1
          ) AS a
       ) AND concatckBatch != ''
    )

【问题讨论】:

    标签: mysql subquery rollup


    【解决方案1】:

    您可以在派生表中进行计算。查询应该是不言自明的。

    Select
        i.id,
        i.CheckNumber,
        i2.AmountPaid
    from
        HS i 
    join (
        select 
           checknumber, 
           sum(amountpaid) AmountPaid 
        from HS 
        group by checknumber
    ) i2 on i2.checkNumber = i.checkNumber
    where 
        i.id in (
           SELECT id
           FROM HS_dups
           WHERE concatckBatch IN (
              SELECT *
              FROM (
                 SELECT concatckBatch
                 FROM HS_dups
                 GROUP BY concatckBatch
                 HAVING COUNT(concatckBatch) > 1
              ) AS a
           ) AND concatckBatch != ''
        )
    

    在其他数据库中,这可以通过使用窗口分析函数轻松实现,例如 sum(i.amountpaid) over (partition by i.checknumber),但遗憾的是 MySQL 不支持该构造。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2016-05-13
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多