Mysql中前N个的和

Mysql中前N个的和,mysql,Mysql,下面是我的样品表。我想在每门课程的总分中排名第一 create table SC( SId varchar(10) comment "Student ID", CId varchar(10) comment "Course ID", score decimal(18,1) comment "Test Score"); insert into SC values('01' , '01' , 100); insert into SC values('01' , '01' , 80); in

下面是我的样品表。我想在每门课程的总分中排名第一

    create table SC(
SId varchar(10) comment "Student ID",
CId varchar(10) comment "Course ID",
score decimal(18,1) comment "Test Score");

insert into SC values('01' , '01' , 100);
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 60);
insert into SC values('02' , '03' , 70);
因此,结果将是:

我使用了下面的代码,但分数不是总和

SELECT SId,CId,sum(score)  from sc a
where 1 > (SELECT count(*) from sc where a.CId=CId and  a.score <score)
group by CId
ORDER BY CId

我有Mysql 5.7,您能提供帮助吗?

使用以下查询获得所需的输出

SELECT `SId`,`CId`,sum(`score`) from sc
GROUP BY `SID`,`CId`
ORDER BY `SId` ASC, `CId` ASC;
如果有更多的学生,比如我想要前三名呢


这会引发错误吗?我认为在子查询中是不可用的。认真考虑使用整数DATATYPEIT存储整数,显示每个课程的学生01的最高分数,而不是SysSCOLSOLVES的另一个任务。结果与提供的不匹配。西塔特:我想在每门课程的总分中获得前1名的学生,而答案得到了所有的总分。它工作得很好!如果有更多的学生,比如说我想要前三名呢?@RRRosa哦,这又是一个更难的任务。您必须枚举摘要记录,使用用户定义的变量模拟行编号,并选择此编号不超过3的记录。/me不知道是否拥有所有。。。。所以,我在做:@Luuk,关于展示前三名的同样问题,如果更多的学生?我还是不明白out@RRRosa前3名的变量已添加,源数据已展开。
SELECT SId,
       CId,
       SUM(score) score
FROM SC a
GROUP BY SId, CId
HAVING score >= ALL ( SELECT SUM(score)
                      FROM SC b
                      WHERE a.CId=b.CId
                      GROUP BY b.SId, b.CId );
SELECT SId, CId, score
FROM ( SELECT SId, CId, score,
              @rownumber := IF(@course = CId, @rownumber + 1, 1) rownumber,
              @course := CId
       FROM ( SELECT SId, CId, SUM(score) score
              FROM SC a
              GROUP BY SId, CId ) data, 
            ( SELECT @rownumber:=0, @course:='' ) vars
       ORDER BY CId, score DESC ) data
WHERE rownumber <= 3;