SQL中的最大总和

时间:2011-08-17 19:38:50

标签: sql

我有一个查询,可以找到某个人的姓氏,已支付金额的总和以及该人的代码。我需要创建一个返回姓氏和最大总和代码的查询。例如,如果我从这开始:

SELECT
         LastName,
    SUM(a.NetPaidAmount) AS TotalPaid,
    Code1,
...

它返回此集:

LastName   TotalPaid    Code1
Brown      264.26       295.30
Brown      1014.43      295.60
Brown      2960.98      295.70
Johnson    14098.84     295.30

我希望我的新查询返回行

LastName  Code1
Brown     295.70
Johnson   295.30

如何做到这一点?

3 个答案:

答案 0 :(得分:1)

Select LastName, SUM(a.NetPaidAmount) AS TotalPaid, (MAX)Code1, ...

Group By LastName

按姓氏分组,将MAX功能应用于代码1。

答案 1 :(得分:0)

更改

SELECT LastName, SUM(a.NetPaidAmount) AS TotalPaid, Code1, ...

SELECT LastName, SUM(a.NetPaidAmount) AS TotalPaid, Code1, ...... Order by TotalPaid DESC LIMIT 1

答案 2 :(得分:0)

您应该应用分组。像

这样的东西
SELECT
    LastName,
    SUM(NetPaidAmount) AS TotalPaid
FROM
    XYZ
GROUP BY
   LastName

确切的分组可能会根据您要输出的列而有所不同。

<强>更新

如果您另外按Code1分组,则总和实际上将所有NetPaidAmount相加,其中Lastname与Code1是唯一的。如果要将最大值添加到另一个分组级别,则必须组合两个查询。一个与你的摸索,一个只有姓氏。

没有经过测试,写出了我的脑袋:

SELECT 
    A.Lastname, 
    A.TotalPaid, 
    B.Code1
FROM ( SELECT
           LastName,
           SUM(NetPaidAmount) AS TotalPaid
       FROM
           XYZ
       GROUP BY
           LastName ) A
INNER JOIN ( SELECT 
                 Lastname, 
                 Code1
             FROM
                 XYZ
             GROUP BY
                 Lastname, Code1 ) B ON B.Lastname = A.Lastname

我的SQL是T-SQL风格,因为我习惯于查询Microsft SQL Server,这很可能不是最快的做这些事情。因此,根据您使用的DB,SQL可能看起来不同。

更新2:

(我必须重新格式化您想要的输出以了解更多信息,您可以使用代码部分输出表格,因为它们尊重空格)

我认为不需要NetPaidAmount来获得所需的输出。应该使用类似的东西生成所需的输出(基于您提供的证据):

SELECT
    Lastname,
    MAX ( Code1 ) As Code1
FROM
    XYZ
GROUP BY
    Lastname

从您的问题中看不到更多详细信息,您应该提供更多信息以获得更多有关方向的帮助