MySQL汇总每个类别的前2条记录
我有一个学生成绩表,我试图为某一特定类别的所有学生合计前2名的分数。我搜索过类似的帖子,但没有得到正确的答案 我试着把分数加起来,但只得到了两个学生的结果,而不是所有学生的结果,这并没有给我正确的值MySQL汇总每个类别的前2条记录,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,我有一个学生成绩表,我试图为某一特定类别的所有学生合计前2名的分数。我搜索过类似的帖子,但没有得到正确的答案 我试着把分数加起来,但只得到了两个学生的结果,而不是所有学生的结果,这并没有给我正确的值 SELECT SUM(marks) as totalmarks,stdid FROM (( select marks,stdid from finalresult where `subjectcategory` = 1
SELECT SUM(marks) as totalmarks,stdid
FROM (( select marks,stdid
from finalresult
where `subjectcategory` = 1
AND `classId`='3' AND `year`='2018'
AND `term`='2' AND `type`='23'
order by marks desc
LIMIT 2 ))t1
GROUP BY stdid
辅助子查询可用于迭代
SELECT
stdid, marks
FROM
(
SELECT stdid, marks,
@rn := IF(@iter = stdid, @rn + 1, 1) AS rn,
@iter := stdid
FROM finalresult
JOIN (SELECT @iter := NULL, @rn := 0) AS q_iter
WHERE `subjectcategory` = 1
AND `classId`='3'
AND `year`='2018'
AND `term`='2'
AND `type`='23'
ORDER BY stdid, marks DESC
) AS T1
WHERE rn <= 2
此解决方案忽略关系,每个学生ID只需要两个
辅助子查询可用于迭代
SELECT
stdid, marks
FROM
(
SELECT stdid, marks,
@rn := IF(@iter = stdid, @rn + 1, 1) AS rn,
@iter := stdid
FROM finalresult
JOIN (SELECT @iter := NULL, @rn := 0) AS q_iter
WHERE `subjectcategory` = 1
AND `classId`='3'
AND `year`='2018'
AND `term`='2'
AND `type`='23'
ORDER BY stdid, marks DESC
) AS T1
WHERE rn <= 2
此解决方案忽略关系,每个学生ID只需要两个
在MySQL 8+中,您可以执行以下操作:
SELECT stdid, SUM(marks) as totalmarks
FROM (SELECT fr.*,
ROW_NUMBER() OVER (PARTITION BY stdid ORDER BY marks DESC) as seqnm
FROM finalresult fr
WHERE subjectcategory = 1 AND
classId = 3 AND
year = 2018 AND
term = 2 AND
type = 23
) fr
WHERE seqnum <= 2
GROUP BY stdid;
在MySQL 8+中,您可以执行以下操作:
SELECT stdid, SUM(marks) as totalmarks
FROM (SELECT fr.*,
ROW_NUMBER() OVER (PARTITION BY stdid ORDER BY marks DESC) as seqnm
FROM finalresult fr
WHERE subjectcategory = 1 AND
classId = 3 AND
year = 2018 AND
term = 2 AND
type = 23
) fr
WHERE seqnum <= 2
GROUP BY stdid;
那么你想把每个学生在给定的班级、学期、年份和类型中的前2名分数相加?所以每个学生都应该得到前两行的总和,所有学生都应该显示出来?你知道你使用的mysql是什么版本吗?所以你想对每个学生在给定的班级、学期、年份和类型上的前两名分数进行总和?所以每个学生都应该得到上面两行的总和,所有学生都应该显示出来。你知道你使用的mysql是什么版本吗?这个只给2个学生和我想要所有学生的总和,这个只给2个学生和我想要所有学生的总和