我有一个查询,可以找到某个人的姓氏,已支付金额的总和以及该人的代码。我需要创建一个返回姓氏和最大总和代码的查询。例如,如果我从这开始:
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
如何做到这一点?
答案 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
从您的问题中看不到更多详细信息,您应该提供更多信息以获得更多有关方向的帮助