DB2 Toad SQL — группировать по определенным столбцам с помощью команды Max

#sql #group-by #db2 #toad

#sql #группировать по #db2 #toad

Вопрос:

У меня возникли некоторые проблемы с приведенным ниже запросом. Я понимаю, что мне нужно группировать по идентификатору и категории, но я хочу группировать только по идентификатору, сохраняя при этом остальные столбцы на основе ранга max. Есть ли способ группировать только по определенным столбцам?

 select ID, Category, max(rank)
from schema.table1
group by ID
  

Ввод:

 ID   Category   Rank
111  3          4
111  1          5
123  5          3
124  7          2
  

Текущий вывод

 ID   Category   Rank
111  3          4
111  9          1
123  5          3
124  7          2
  

Желаемый результат

 ID   Category   Rank
111  1          5
123  5          3
124  7          2
  

Комментарии:

1. Разве первая строка желаемого результата не должна быть (111, 1, 5)?

2. Вы совершенно правы! Я отредактирую сообщение. Спасибо!

Ответ №1:

Вы можете использовать:

 select *
from table1
where (id, rank) in (select id, max(rank) from table1 group by id)
  

Результат:

 ID   CATEGORY  RANK 
---- --------- ---- 
111  1         5    
123  5         3    
124  7         2    
  

Или вы можете использовать функцию ROW_NUMBER() window . Например:

 select * 
from (
  select *,
    row_number() over(partition by id order by rank desc) as rn
  from table1
) x
where rn = 1
  

Смотрите Пример выполнения в db<>fiddle.

Ответ №2:

Вы можете попробовать использовать — row_number()

 select * from
(
select ID, Category,rank, row_number() over(partition by id order by rank desc) as rn
from schema.table1
)A where rn=1