2011-08-17 123 views
0

我有一個查詢可以查找某人的姓氏,付款金額和該人員的代碼總和。我需要創建一個查詢,返回最大名稱和最大和的代碼。例如,如果我開始與此: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 

如何才能做到這一點?

+0

你的'group by'是什麼? – a1ex07

+0

Group By LastName,Code1 –

+0

你能向我們展示你的整個查詢嗎? – evilone

回答

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

Group By LastName 

集團按姓氏,申請MAX功能代碼1

+0

我同意他的問題,原來,我正在重做我的答案。 –

+0

我不能做前1名,因爲我想爲每個姓產生最大支付。 –

+0

謝謝喬恩!這是我需要的! –

0

變化

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

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

您應該應用分組。類似於

SELECT 
    LastName, 
    SUM(NetPaidAmount) AS TotalPaid 
FROM 
    XYZ 
GROUP BY 
    LastName 

確切的分組可能會因您要輸出的列而有所不同。

更新:

如果通過編碼1 groupy另外,然後總和居然總結所有NetPaidAmount其中姓與代碼1一起是獨一無二的。如果您希望額外增加另一個分組級別,則必須組合兩個查詢。一個與你的摸索和一個團結僅在姓氏。

沒有測試,寫了我的頭:

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中,這是最有可能不是最快的是做這樣的事情。因此,根據您使用的數據庫,SQL可能看起來不同。

更新2:

(我不得不重新格式化您所需的輸出瞭解更多,您可以使用代碼段輸出表,因爲他們尊重空格)

我沒有看到NetPaidAmount需要爲期望的輸出。所需的輸出應該是這樣的(根據您所提供的證據)來獲得:

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

更多細節不是從你的問題可見,你應該提供更多信息,以獲得更多的幫助哪個方向

+0

他需要'NetPaidAmount',因爲他需要'Code1'值爲最大的_sum_(而不是最大的'Code1'值)。至少,這就是我如何閱讀它... –

+0

是的,有一些解釋空間... – Sascha