SQL таблицы представляют неупорядоченные наборы. Ваши результаты, кажется, подразумевают, что результаты в некотором порядке. Ни один столбец не содержит такой порядок.
Один из способов - просто поместить значения в массивы:
select id, array_agg(grade order by <ordering col>) as grades,
array_agg(comment order by ?) as comment
from t
group by id;
. Вы можете расширить это до нескольких столбцов:
select id,
(array_agg(grade order by <ordering col>))[1] as grade_1,
(array_agg(grade order by <ordering col>))[2] as grade_2,
(array_agg(grade order by <ordering col>))[3] as grade_3
(array_agg(comment order by <ordering col>)[1] as comment_1,
(array_agg(comment order by <ordering col>)[2] as comment_2,
(array_agg(comment order by <ordering col>)[3] as comment_3
from t
group by id;