2016-02-23 192 views
0

我有一個非常大的表,我需要從中檢索數據。該表是這樣的:Oracle:如何獲得列表中每個項目的最大值

A  B   C  D 
1  foo   4  q 
1  fool   2  p 
1  fools  13  a 
2  pho   5  d 
3  phone  14  g 
3  phones  6  f 

我試圖運行類似:

select max(B) from table where A = 1 union 
select max(B) from table where A = 2 union 
. 
. 
. 
select max(B) from table where A = 50000; 

我想是可以得到:

1 -> fools 
2 -> pho 
3 -> phones 

我有大約50,000條記錄運行這個查詢。 上述方法理論上可行(我嘗試了一個小子集),但我認爲對每個50000值都有一個選擇查詢是低效的。 這也導致進程內存不足錯誤。

有沒有一種方法可以在單個查詢中執行此操作? 我想:

select max(B) from table where A in (first group of 1000) union 
select max(B) from table where A in (1000...2000) union 
. 
. 
. 
select max(B) from table where A in (40000...50000) 

但是這給了我每選擇查詢只有一個最大值(我明白爲什麼) 我真正想要的是50000個最大值。

有我得到的,如果我使用

select max(B) from table where A in (...) 

謝謝名單MAX(B)每個項目的值的方式!

回答

0

它看起來像你只需要使用GROUP BY,像這樣:

select A, max(B) 
from table 
group by A 
order by A 

讓我知道如果我失去了一些東西。

+0

工作,謝謝! 我需要做的: '選擇A,最大值(B) 從表 組由A 工會 選擇A,最大值(B) 從表 組由A 爲了通過A' – c3p0

相關問題