如何在MySQL中正确汇总2列查询

时间:2013-06-01 03:57:02

标签: mysql sql

我很难根据一列值来总结一列不同的值,这些值也需要是不同的。例如,我有:

Index  PaymentID  PaymentAmt PartPmtApplied
  1        35        50          26
  2        35        50          24
  3        36        50          38
  4        36        50          12
  5        37        52          14
  6        37        52          14
  7        37        52          24
  8        38        54          37
  9        38        54          17
 10        39       100         100

我使用的查询如下:

Select sum(paymentamt) from tbl_A where paymentid = 
             (select distinct paymentsid from tbl_A);

所以,我认为我的查询是正确的,但是当我这样做时,它仍然总结了PaymentAmt列中的每个值,即我总共得到564而不是256。

任何人都有更好的方法来找到这个价值?提前谢谢。

感谢您的快速回复。但是,正如有人问的那样,这就是我要找的东西:

35   50
36   50
37   52
38   54
39  100

总和= 256.所以,我应该返回256的单个值。

4 个答案:

答案 0 :(得分:3)

实际上,您可以在没有任何子查询的情况下执行此操作。只需在查询中使用GROUP BY即可。

SELECT  PaymentID, SUM(PaymentAmount) TotalPayment
FROM    tabl_a
GROUP   BY PaymentID

这将为您提供PaymentID的唯一值,其计算总金额为PaymentAmount

输出

╔═══════════╦══════════════╗
║ PAYMENTID ║ TOTALPAYMENT ║
╠═══════════╬══════════════╣
║        35 ║          100 ║
║        36 ║          100 ║
║        37 ║          156 ║
║        38 ║          108 ║
║        39 ║          100 ║
╚═══════════╩══════════════╝

答案 1 :(得分:1)

您想要使用GROUP BY。

SELECT PaymentID, SUM(PaymentAmt) as PaymentTotal FROM tbl_A GROUP BY PaymentID;

这会为每个唯一的PaymentID输出一行,并附上相应的付款金额。欢呼声。

答案 2 :(得分:1)

如果你需要对不同的值求和,你可以简单地从一个只包含不同值(或不同的值对)的子查询中求和。

所以你可能需要

SELECT SUM( PaymentAmt ) FROM 
  ( SELECT PaymentAmt FROM tabl_a
    GROUP BY PaymentId, PaymentAmt ) distinct_payments;

但是,这将给出306作为结果,将id 35和36的付款视为单独的。如果你真的想要获得256,这将是不同付款的总和而没有任何与ids的链接,那么只需使用GROUP BY PaymentAmt

答案 3 :(得分:0)

您是否希望sum所有distinct amounts,因为它会得到结果

SELECT
  sum(TotalPayment) 
FROM
 ( SELECT  
    distinct 
    PaymentAmt TotalPayment
  FROM    
    tableName ) t