[英]SELECT Row Values WHERE MAX() is Column Value In GROUP BY Query
[英]Select column value where other column is max of group
我試圖在表中選擇兩列(ID和狀態)。 該表應顯示每個ID的最大值的狀態。 我嘗試過其他幾個例子但似乎沒什么用。
原始數據結構:
ID state value (FLOAT)
1 TX 921,294,481
1 SC 21,417,296
1 FL 1,378,132,290
1 AL 132,556,895
1 NC 288,176
1 GA 1,270,986,631
2 FL 551,374,452
2 LA 236,645,530
2 MS 2,524,536,050
2 AL 4,128,682,333
2 FL 1,503,991,028
因此,結果數據結構應如下所示:
ID STATE (Max Value)
1 FL
2 AL
佛羅里達州和阿拉巴馬州的ID群體價值最高。
任何幫助將不勝感激。 我確實在這里找到了答案,但無法讓答案對我有用。
對於SQL Server(以及具有窗口函數的其他產品):
SELECT *
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY value desc) as rn
FROM
UnnamedTable
) t
WHERE
t.rn = 1
一種解決方案,基於value
數字的假設:
SELECT
[ID],
[State],
[Value]
FROM
(
SELECT
[ID],
[State],
[Value],
Rank() OVER (PARTITION BY [ID] ORDER BY [Value] DESC) AS [Rank]
FROM [t1]
) AS [sub]
WHERE [sub].[Rank] = 1
ORDER BY
[ID] ASC,
[State] ASC
如果具有相同ID
多個State
具有相同的Value
,則它們將獲得相同的Rank
。 這與使用返回唯一行號的Row_Number
不同,但是順序是任意選擇的。 (另請參閱: SQL RANK()與ROW_NUMBER() )
您可以使用子查詢來獲得此結果:
select t1.id, t1.[state] MaxValue
from yourtable t1
inner join
(
select id, max(value) MaxVal
from yourtable
group by id
) t2
on t1.id = t2.id
and t1.value = t2.maxval
order by t1.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.