0

私がこれまでに持っているクエリは

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()それGROUP BYを理解できないようです。そして、私ORDER BYはすべてのカテゴリーで最も多くのポイントを持つ候補者に必要です

注:複数の候補があります

4

4 に答える 4

2

他の答えも正しいですが、IN..subselectステートメントを削除します。不要です。

グループ化するフィールドでグループ化し、合計するフィールドを合計します。

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
于 2013-03-19T14:10:40.050 に答える
1
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

通常、主要なグループ (あなたの場合event) は最初の列です。ただし、目的の結果セットには同じcallSign.

主要なグループ化を候補にしたい場合は、候補フィールドをクエリに含め、次のようにグループ化にも含めますGROUP BY candidateID, event, callSign

于 2013-03-19T14:04:56.663 に答える
0
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

基本的に、合計していない他のすべての列をグループに追加する必要があります。

編集。申し訳ありませんが、グループを間違った場所に配置しました。

于 2013-03-19T14:03:36.960 に答える
0

推測ですが...

 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;
于 2013-03-19T14:08:14.500 に答える