2016-08-05 84 views
1

我有一个这样的数据如何总结重复值,基于某些条件

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,我只需要取最高分,并以不同的分数,进行了不同exam_id这使得他的总成绩概括为87 + 70 = 157

我一直在使用MAX试图

,但我不能让它这样

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

回答

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; 
+0

你有总和缺少结束括号。尝试编辑它,但不能自从它只有一个字符。 –

+0

谢谢!这个清除我的问题 – Koltira

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 

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

0

试试这个...

select name, exam_id, sum(Score) as max_score from result group by name, exam_id 
+0

虽然这段代码可以解决这个问题,但是[包括解释](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高质量您的帖子。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要使用解释性注释来挤占代码,因为这会降低代码和解释的可读性! – FrankerZ