Несколько строк с максимальными значениями в sql

#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. большое спасибо!! это отлично работает со вторым вариантом. пожалуйста, разъясните мне ваш код, поскольку в нем есть расширенные инструкции