Короче на tsql вот так получается. Работает
--табличка с оценками
declare @marks table
(
Id int,
Name varchar(50),
Math int,
Physics int,
Chemistry int
)
--наполняем
insert into @marks
values
(1, 'Вася', 80, 52, 69),
(2, 'Коля', 50, 90, 95),
(3, 'Петя', 62, 98, 42)
------------------------------------------------------------теперь Miracle
--таблица рейтингов
declare @ratings table
(
Id int,
Math varchar(50),
Physics varchar(50),
Chemistry varchar(50)
)
insert into @ratings(id)
values
(1), (2), (3)
declare @id int; --ид записи
set @id = 1;
WHILE (@id) <= 3
BEGIN
UPDATE @ratings
SET
Math = (select Name from @marks order by Math desc OFFSET (select(@id-1)) ROWS FETCH NEXT 1 ROWS ONLY),
Physics = (select Name from @marks order by Physics desc OFFSET (select(@id-1)) ROWS FETCH NEXT 1 ROWS ONLY),
Chemistry = (select Name from @marks order by Chemistry desc OFFSET (select(@id-1)) ROWS FETCH NEXT 1 ROWS ONLY)
where Id = @id;
set @id = @id + 1;
END
select * from @marks
select * from @ratings
Сорян, не сразу увидел, что у вас на постгре. Но, уверен, вам будет не трудно адаптировать решение