Sql 如何计算数据并列出数据

Sql 如何计算数据并列出数据,sql,oracle,Sql,Oracle,我对SQL非常陌生 例如,一个有2个As和3个Cs的学生将产生两个记录:sid,a,2;希德,C,3。如果学生没有任何成绩,我不想把他们列出来 select sid, count(grade) from enrollments group by sid 我想要的示例: sid grade 123 A,2; C,3 456 A,3; B,1 我想这应该对你有用 select sid, listagg(gradecount, ';

我对SQL非常陌生

例如,一个有2个As和3个Cs的学生将产生两个记录:sid,a,2;希德,C,3。如果学生没有任何成绩,我不想把他们列出来

select sid, count(grade) from enrollments
group by sid
我想要的示例:

sid          grade
123          A,2; C,3
456          A,3; B,1

我想这应该对你有用

select sid, 
    listagg(gradecount, '; ') within group (order by gradecount) as grade
from (
    select sid, grade || ',' || count(1) as gradecount
    from enrollments
    where grade is not null
    group by sid, grade
    ) studentgradecount
group by sid;
如果它看起来令人困惑,请尝试单独运行内部查询以查看其功能:

select sid, grade || ',' || count(1) as gradecount
from enrollments
where grade is not null
group by sid, grade