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:你现在要求的是一个枢轴。我建议发布另一个问题,因为获得一个支点与您第一次提出的问题有很大不同。如果愿意,可以使用上述代码作为起点。作为一个新问题,我很乐意为您提供帮助。谢谢: