【问题标题】:Query in SQL with sum and group使用 sum 和 group 在 SQL 中查询
【发布时间】:2017-08-07 07:58:15
【问题描述】:

我想从多个表中选择多个数据,因此我使用连接来获取这些数据,并从这些数据中获得一组代码,并且每个代码组合在一起的总金额。我尝试将SUM()MAX()GROUP BY 一起使用,但我得到了每个组的错误总和。

当不涉及 sum 和 max 和 group 时,我的数据结果如下所示:

查询是:

SELECT DISTINCT 
t17.acctcode,
(pcchrgamt)  
FROM 
hpatchrg AS t3 INNER JOIN 
hcharge AS t17 ON t3.chargcode = t17.chrgcode INNER JOIN
Codes AS t14 ON t17.uacs = t14.accCode

WHERE acctno = '2007-000025486'

结果是:

acctcode    pcchrgamt
613 RECORDS 56.00
613 RECORDS 60.00
631 CSR     56.00
631 CSR     60.00
631 CSR     74.00
631 CSR     88.40
643         2.00
643         3.00
643         4.00
643         6.00
643         8.75
643         10.00
643         11.40
643         39.75
643         40.00
643         41.60
643         44.00
643         47.10
643         49.00
643         50.50
643         80.00
643         80.50
643         88.00
643         96.00
643         100.00
643         106.35
643         109.95
643         132.00
643         192.00
643         878.50
643         2465.00
643         4930.00

当我输入SUMMAXGROUP BY 时,代码如下所示:

SELECT DISTINCT 
t17.acctcode AS acctcode,
SUM(pcchrgamt) AS pcchrgamt  
FROM 
hpatchrg AS t3 INNER JOIN 
hcharge AS t17 ON t3.chargcode = t17.chrgcode INNER JOIN 
Codes AS t14 ON t17.uacs = t14.accCode

WHERE acctno = '2007-000025486'  
GROUP BY acctcode

结果是:

acctcode    pcchrgamt
631 CSR         4454.40
613 RECORDS     1856.00
643             20813073.75

分组是正确的,但总和太差了。我希望 sum 只会像 613 RECORDS116.00 一样,但它还有很长的路要走。我也尝试过使用 Sub 查询,但它现在出错了,我仍在努力。

希望有人能指出查询中的问题。

【问题讨论】:

    标签: sql-server group-by sum max


    【解决方案1】:

    一眼看去,第二个查询中的distinct能否在group by之后处理?尝试将其移至子查询:

    SELECT  acctcode
    ,       SUM(pcchrgamt)
    FROM    (
            SELECT  DISTINCT t17.acctcode
            ,       pcchrgamt
            FROM    hpatchrg AS t3
            JOIN    hcharge AS t17 ON t3.chargcode = t17.chrgcode
            JOIN    Codes AS t14 ON t17.uacs = t14.accCode
            WHERE   acctno = '2007-000025486'
            ) sub
    GROUP BY
            acctcode
    

    【讨论】:

    • 我刚刚尝试了你的代码,我认为我得到了正确的总和你能进一步解释我想了解你做了什么以及sub 是什么,如果有一点解释
    • 发生这种情况是因为 DISTINCT 仅在计算出 SUM 之后才应用,而在您的 JOINS 某处,您会得到 16 个匹配项
    • sub 是子查询的名称。它不使用,但 SQL Server 需要。尝试使用和不使用 distinct 运行您的查询以查看差异。
    • 我想升级,但它说我现在不能打勾,当我能解释的时候升级它。
    • @Manlapig:看来你需要15 reputation 来投票
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多