#sql #select #max #oracle-sqldeveloper
#sql #выберите #макс #oracle-sqldeveloper
Вопрос:
Кто-нибудь может мне помочь со следующим?
Я пытаюсь сгруппировать по (ПО) и по (строке), чтобы получить максимальное значение (количество) независимо от значения в (тип).
Я попытался сгруппировать по ПО и строке, и это не сработало, и это показало
ошибка: «не группируется по функции».
данные выглядят следующим образом:
по | строка | Тип | Количество |
---|---|---|---|
100 | 1 | 4 | 23 |
100 | 1 | 5 | 20 |
100 | 2 | 1 | 40 |
200 | 1 | 1 | 10 |
200 | 2 | 2 | 15 |
и я хотел бы получить следующий результат:
по | строка | Тип | Количество |
---|---|---|---|
100 | 1 | 4 | 23 |
100 | 2 | 1 | 40 |
200 | 1 | 1 | 10 |
200 | 2 | 2 | 15 |
код:
select
orno "PO NUMBER",
pono "Line",
oltp "Line Type",
max(qoor) "Quantity"
from
table
group by orno;
Комментарии:
1. для отображения таблиц используйте обычный текст или table markdown, а также, пожалуйста, укажите немного DDL.
Ответ №1:
Одним из методов является коррелированный подзапрос:
select t.*
from t
where t.quantity = (select max(t2.quantity)
from t t2
where t2.po = t.po and t2.line = t.line
);
В Oracle другим вариантом является агрегирование:
select po, line,
max(type) keep (dense_rank first order by quantity desc) as type,
max(quantity) as quantity
from t
group by po, line;
keep
Синтаксис — это причудливый способ Oracle реализовать «первую» функцию агрегирования.
Комментарии:
1. большое спасибо!! это отлично работает со вторым вариантом. пожалуйста, разъясните мне ваш код, поскольку в нем есть расширенные инструкции