簡體   English   中英

選擇其他列為組的最大值的列值

[英]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

請參閱SQL Fiddle with Demo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM