2012-03-08 100 views
0

停留在查詢上的類型。我有一張測驗結果表,其中包含:SQL查找每組最高記錄

ID of the player, 
QuizID, 
Number of seconds it took to complete the quiz, 
Number of correct answers 

我如何找到每個測驗的勝者。 =玩家的最大正確答案數量和每個QuizID的最短秒數

我已經嘗試了很多方法,但我無法獲得正確的結果。希望有人能幫忙。

謝謝!

+1

如果有兩名玩家的正確答案數和同一時間數相同,您希望發生什麼? – 2012-03-08 09:00:07

+0

如果一個玩家擁有最多正確答案而另一個玩家擁有最少秒數? – 2012-03-08 09:02:44

+0

AT:Mark如果有兩個玩家的正確答案和時間相同,那麼它將是第一個進入的玩家,所以最低的玩家ID將在這裏進行。 AT:ypercube我想讓球員用最少的時間回答最正確的球員 – gen 2012-03-08 09:31:00

回答

4

CTE將計算髮生在測驗每個玩家。主要查詢僅篩選第一個職位。

; with quiz as (
    select QuizId, PlayerID, row_number() over (partition by QuizId order by count_answers desc, seconds) rownum 
     from QuizResults 
) 
select * 
from QuizResults 
    inner join Quiz 
     on QuizResults.QuizID = Quiz.QuizID 
     and QuizResults.PlayerID = Quiz.PlayerID 
where rownum = 1 
+0

我將'asc'和'desc'切換了,因爲它給了我0個正確答案的球員:)現在完美地工作! – gen 2012-03-08 09:52:46

+0

是的,我看到了錯誤和編輯,但你有錯誤的版本。 – 2012-03-08 09:54:08

+0

噢,謝謝^^我甚至不知道'分區'存在 – gen 2012-03-08 09:54:16

0

未驗證:

select ID 
from your_table 
group by QuizId 
having max(count_answers) and min(seconds) 
+0

這隻會顯示最高紀錄,而不是最高的每組。 – 2012-03-08 09:07:21