Mysql 每个事件中每个候选人的总分列
到目前为止,我的疑问是Mysql 每个事件中每个候选人的总分列,mysql,sum,Mysql,Sum,到目前为止,我的疑问是 SELECT callSign,event,rubric,score FROM scores LEFT JOIN candidates ON scores.candidateID=candidates.id WHERE candidateID IN (SELECT id FROM candidates WHERE assessmentID='1321') ORDER BY candidateID,event
SELECT callSign,event,rubric,score
FROM scores LEFT JOIN candidates
ON scores.candidateID=candidates.id
WHERE candidateID IN
(SELECT id
FROM candidates
WHERE assessmentID='1321')
ORDER BY candidateID,event
返回如下数据集:
callSign event score
V021 Amazing Race Planning 5
V021 Amazing Race Planning 3
V021 Amazing Race Planning 5
V021 Individual Analyst Exam 3
V021 PSA 5
V021 Team Analyst Exam 5
V021 Team Analyst Exam 5
V021 Team Analyst Exam 3
V021 Team Analyst Exam 5
V022 PSA 1
V022 Team Tech Exam 5
V022 Team Tech Exam 3
我要找的是每个候选人将每个事件的分数相加,这样看起来:
callSign event score
V021 Amazing Race Planning 13
V021 Individual Analyst Exam 3
V021 PSA 5
V021 Team Analyst Exam 18
V022 PSA 1
V022 Team Tech Exam 8
我确定我需要某种类型的SUM()
和groupby
的组合,但我似乎想不出来。然后我需要按所有类别中得分最多的候选人排序
注意:有多个候选人
SELECT callSign,event,rubric,SUM(score)
FROM scores LEFT JOIN candidates
ON scores.candidateID=candidates.id
WHERE candidateID IN
(SELECT id
FROM candidates
WHERE assessmentID='1321')
GROUP BY callSign,event,rubric
ORDER BY candidateID,event
基本上,您只需要将未求和的其他列添加到分组中
编辑。对不起,把小组放错地方了
SELECT callSign,event, SUM(score)
FROM scores LEFT JOIN candidates
ON scores.candidateID=candidates.id
WHERE candidateID IN
(SELECT id
FROM candidates
WHERE assessmentID='1321')
GROUP BY event, callSign
ORDER BY candidateID,event
基本上,您只需要将未求和的其他列添加到分组中
编辑。对不起,把小组放错地方了
SELECT callSign,event, SUM(score)
FROM scores LEFT JOIN candidates
ON scores.candidateID=candidates.id
WHERE candidateID IN
(SELECT id
FROM candidates
WHERE assessmentID='1321')
GROUP BY event, callSign
ORDER BY candidateID,event
通常,主要分组(在您的案例中是事件
)是第一列。但是,由于所需的结果集对于同一个呼号有多行,因此它必须是次要分组列,而不是主要分组列
如果希望主要分组是针对候选人的,请在查询中包括候选人字段,并将其包括在分组中,如groupbycandidateid、event、callSign
通常,主要分组(在您的案例中是事件
)是第一列。但是,由于所需的结果集对于同一个呼号有多行,因此它必须是次要分组列,而不是主要分组列
如果您希望主要分组是针对候选人的,请在查询中包括候选人字段,并将其包括在分组中,如按候选人ID、事件、呼号分组。
猜测一下
SELECT callSign
, event
, SUM(score) total
FROM scores s
LEFT
JOIN candidates c
ON c.id = s.candidateID
AND c.assessmentID=1321
GROUP
BY callsign
, event;
只是一个猜测
SELECT callSign
, event
, SUM(score) total
FROM scores s
LEFT
JOIN candidates c
ON c.id = s.candidateID
AND c.assessmentID=1321
GROUP
BY callsign
, event;
其他答案也是正确的,但我会删除。。子选择语句。没必要
按要分组的字段分组,并对要合计的字段求和
SELECT callSign, event, SUM(score) score
FROM scores
JOIN candidates
ON scores.candidateID = candidates.id
WHERE candidates.assessmentID = '1321'
GROUP BY callSign, event
ORDER BY candidateID, event
其他答案也是正确的,但我会删除。。子选择语句。没必要
按要分组的字段分组,并对要合计的字段求和
SELECT callSign, event, SUM(score) score
FROM scores
JOIN candidates
ON scores.candidateID = candidates.id
WHERE candidates.assessmentID = '1321'
GROUP BY callSign, event
ORDER BY candidateID, event
rubric
列在哪里?@JW。我把它拿出来是为了减少混乱。另外,请注意,有多个候选人需要“汇总”他们的分数。我回滚了您的编辑,因为这里的答案对新问题没有意义,我们希望这些问题/答案对未来的访问者有用。rubric
列在哪里?@JW。我把它拿出来是为了减少混乱。另外,请注意,有多个候选人需要“汇总”他们的分数。我回滚了您的编辑,因为这里的答案对新问题没有意义,我们希望这些问题/答案对未来的访问者有用。很抱歉给您添麻烦。你的查询很有效,但我如何让返回数据显示我的编辑所显示的内容?@h3rrmiller:你现在要求的是一个枢轴。我建议发布另一个问题,因为获得一个支点与您第一次提出的问题有很大不同。如果愿意,可以使用上述代码作为起点。作为一个新问题,我很乐意帮助你。谢谢:对不起,打扰你了。你的查询很有效,但我如何让返回数据显示我的编辑所显示的内容?@h3rrmiller:你现在要求的是一个枢轴。我建议发布另一个问题,因为获得一个支点与您第一次提出的问题有很大不同。如果愿意,可以使用上述代码作为起点。作为一个新问题,我很乐意为您提供帮助。谢谢: