with temp as(
select 1001 user_id, '张三' real_name ,'一年级' grade ,'1班' classes from dual union all
select 1002 user_id, '李四' real_name ,'一年级' grade ,'2班' classes from dual union all
select 1003 user_id, '王五' real_name ,'二年级' grade ,'3班' classes from dual union all
select 1004 user_id, '陈六' real_name ,'二年级' grade ,'1班' classes from dual union all
select 1005 user_id, '左七' real_name ,'一年级' grade ,'3班' classes from dual union all
select 1006 user_id, '拉八' real_name ,'三年级' grade ,'1班' classes from dual
)
select real_name,
grade,
classes,
listagg(classes,',') within GROUP (order by grade) over (partition by grade) rank
from temp
select grade, listagg(classes, ',') within GROUP(order by grade)
from temp
group by grade