2012-03-08 66 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