如何根据特定条件SUM重复值

时间:2016-08-05 11:28:02

标签: mysql sql

我有这样的数据,

Name  |Exam_ID|Score
------+-------+------
Matt  |12     | 87
Matt  |12     | 85
Andy  |10     | 89
Lisa  |11     | 32
Lisa  |11     | 68
Andy  |11     | 38
Matt  |10     | 70
Lisa  |10     | 87

我想要记录那些分数,但只有那些名称和exam_id不同的分数。如果同一个名字上有多个相同的exam_id,则会获得最高分。最终结果我想这样:

Name  |Score
------+------
Matt  | 157
Andy  | 127
Lisa  | 155
马特得到3分(87,85,70)。但是由于87和85使用相同的exam_id,我只需要取得最高分并将其与不同得分的SUM一起得到不同的exam_id,这使得他的总分为87 + 70 = 157

我一直在尝试使用MAX,但我不能这样做

SELECT Name, MAX(Exam_ID), SUM(Score) from RESULT
group by NAME;

3 个答案:

答案 0 :(得分:2)

您需要两个级别的聚合:

select name, sum(max_score)
from (select name, exam_id, max(score) as max_score
      from result
      group by name, exam_id
     ) ne
group by name;

答案 1 :(得分:0)

您需要利用结构化查询语言的结构化部分,并进行两级查询

 SELECT Name, SUM(Score) AS Score
   FROM (
              SELECT Name, Exam_ID, MAX(Score) AS Score
                FROM Result
               GROUP BY Name
        ) BestScoresPerExam
  GROUP BY Name

内部查询获得每个考试的最佳分数。外面的一个总和得分。

答案 2 :(得分:0)

试试这个......

select name, exam_id, sum(Score) as max_score from result group by name, exam_id
相关问题