2011-08-18 29 views
1

下面是我查詢我使用:SQL Max和點心

SELECT 
    County, 
    Code, 
    Sum(PaidAmount) AS TotalPaid 
FROM 
    Counties 
GROUP BY 
    County, 
    Code 

它返回集合:

County  Code   TotalPaid 
Brown  99   210.21 
Lyon  73   322.22 
Lyon  88   533.22 
Lincoln 22   223.21 

我所尋找的是一個查詢,將返回顯示行縣和每個縣的最大總支付代碼。結果集,我需要如下所示的例子(注意里昂,73因爲里昂除去,88具有更高TotalPaid量):

County  Code   TotalPaid 
Brown  99   210.21 
Lyon  88   533.22 
Lincoln 22   223.21 
+0

什麼數據庫是什麼? Oracle,SQL Server等? –

+0

SQL Server 2008 –

回答

2

我不能對此進行測試,但RANK應該解決這個問題:

SELECT x.County, x.Code x.TotalPaid 
    ,RANK() OVER 
    (PARTITION BY x.County ORDER BY x.TotalPaid DESC) AS 'RANK' 
FROM 

(SELECT 
    County, 
    Code, 
    Sum(PaidAmount) AS TotalPaid 
FROM 
    Counties 
GROUP BY 
    County, 
    Code) x 
WHERE Rank = 1 
+0

Woo !!非常感謝!這就是我需要的樣子! –

-2

這裏有一個更新的解決方案:

select c1.county, c1.code, c1.paidAmount 
from counties c1 
inner join (
    select county, max(paidAmount) paidAmount 
    from counties 
    group by county) c2 
on c1.county=c2.county and c1.paidAmount=c2.paidAmount; 

請注意,如果某個縣的最高支付金額爲多個,則會返回所有共享該最大值的行。

+0

這會給我每個縣的最大代碼值的總和,這不是我想要的。我想顯示最大TotalPaid行的縣和代碼。 –

+0

@Eric R:對不起,意識到我剛發佈。尋找這樣做的最佳方式... – Briguy37

+0

@Eric R:更新了我的解決方案。 – Briguy37

0
SELECT 
    c.County, 
    c.Code, 
    Sum(c.PaidAmount) AS TotalPaid 
    FROM 
    Counties c 
    WHERE 
    c.Code in (select max(c2.code) from counties c2 where c2.county = c.county) 
    GROUP BY 
    c.County, 
    c.Code 

這個應該工作,雖然我沒有測試過

+0

他不想要最大代碼值,他希望在每個縣內具有最大「TotalPaid」的代碼。 –

1

我想你需要做類似的follwoing。在我能夠回顧我所寫的內容之前,我剛剛被叫走,但希望它能給你足夠的指針。有些RDBMS中不允許「其中國家,TotalPaid =選擇價值,價值」的構建,但你可以解決此

select 
    County, 
    Code, 
    TotalPaid 
from (SELECT 
     County, 
     Code, 
     Sum(PaidAmount) AS TotalPaid 
    FROM 
     Counties 
    GROUP BY 
     County, 
     Code) tbl 
where County, TotalPaid = (select County, 
           max(TotalPaid) 
          FROM 
           Counties 
          GROUP BY 
           County, 
           Code) tbl2 
+0

不知道SQL Server,但在Oracle中,語法是'where(county,totalpaid)IN(select ...)' –

0

你將不得不使用窗口功能,做到這一點。儘管你想要的東西很容易用英語表達,但不幸的是,它不容易用SQL表達。這應該做你需要的東西:

select 
    County, Code, TotalPaid 
from 
(
SELECT 
    County, 
    Code, 
    sum(PaidAmount) AS TotalPaid 
FROM 
    Counties 
GROUP BY 
    County, Code 
) source 

where (row_number() over (partition by County order by TotalPaid desc)) = 1