【发布时间】:2017-08-27 22:43:09
【问题描述】:
我有以下问题。
SELECT
SUM(
marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
),
FIND_IN_SET(
SUM(
marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
),
(SELECT
GROUP_CONCAT(summarks
ORDER BY summarks DESC)
FROM
(SELECT
SUM(
marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
) AS summarks
FROM
results
GROUP BY student_id) sm)
) AS rank
FROM
results
WHERE student_id = ".$student_id."
AND exam_year = ".$year."
AND exam_id = ".$exam."
AND results.class_id = ".$class_id."
AND section_id = ".$section_id."
仅当我的结果表中有一项考试时,此查询才适用于我。 当有更多考试时,此查询会计算所有考试的分数并将排名返回给我。但是如果我只需要一个考试的学生排名,我需要将exam_id 放入查询中,当我这样做时,查询返回0 作为学生排名。
在上图中,我得到了无效的第 0 个位置。但是如果我删除了exam_id 条件,那么我得到了正确的排名,但问题是它汇总了我不想要的所有输入考试的分数,因为我需要排名一个特定的考试。
所以请任何人告诉我应该在查询中的哪个位置放置exam_id 条件。
【问题讨论】:
-
更新您的问题添加适当的数据样本和预期结果
-
已更新。请立即查看