2016-02-23 3 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 максимальных значений.

Есть ли способ для меня, чтобы получить значение макс (B) для каждого элемента в списке, если я использую

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

Спасибо!

ответ

0

Похоже, что вам просто нужно использовать GROUP BY, как это:

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

Позвольте мне знать, если я что-то не хватает.

+0

Это сработало, спасибо! мне нужно сделать: 'выберите A, макс (B) из таблицы группы с помощью союза выбора А, не более (В) из таблицы группы с помощью заказа по A' – c3p0

Смежные вопросы