#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