2016-08-05 121 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