У меня есть очень большая таблица, из которой мне нужно получить данные. Таблица выглядит следующим образом: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 (...)
Спасибо!
Это сработало, спасибо! мне нужно сделать: 'выберите A, макс (B) из таблицы группы с помощью союза выбора А, не более (В) из таблицы группы с помощью заказа по A' – c3p0