一个有趣的查找--搜索最大值所在的ID号

发表于:2007-05-25来源:作者:点击数: 标签:
朋友出了个题,各有A,B,C三人做 游戏 ,记录第次得分,经几十次游戏后,成绩如下: IDName Score 1 a 88 2 b 76 3 c 66 4 c 90 5 b 77 6 a56 7 b 77 8 c 67 9 a 44 ...... 当然还有很多 要求搜索A,B,C三人各最好成绩,并且要列出最好成绩的序号即ID号 如
朋友出了个题,各有A,B,C三人做游戏,记录第次得分,经几十次游戏后,成绩如下:

ID Name Score
1     a         88
2     b         76
3     c         66

4     c         90
5     b         77
6     a         56

7     b         77
8     c         67
9     a         44

......

当然还有很多

要求搜索A,B,C三人各最好成绩,并且要列出最好成绩的序号即ID号
如:
ID Name Score
1     a         88
5     b         77
4     c         90

最初我觉得好象是初级的题,把眼光放在最大值上,但随后就觉得这重点不在最大值上,而是最大值所在的ID号。
题目难点:搜索出最大值所在的 ID
例外情况:每个人都可能出现几个最大的值

动脑:开始先想到这MAX函数:
SELECT MAX(Score), [Name] GROUP BY [Name]
但这该死的 ID 号怎么也插入不了

一线希望:用了个子查询:
SELECT [ID],[Name],Score
FROM Table1 a
WHERE Score IN
    (SELECT MAX(b.Score) AS MAXScore
    FROM Table1 b
    GROUP BY b.[Name] )
可是,这 ID 号还是多出来了,原因是由于该搜索是以最大值的集合作依据,如77这个最大值,可能是B的最大值,但是A和C可能也会出现77这个数,但不是最大值,所以......

胜利,最后加了个条件,使最大值集合中的Name值,与搜索的Name值相符合
SELECT [ID],[Name],Score
FROM Table1 a
WHERE Score IN
    (SELECT MAX(b.Score) AS MAXScore
    FROM Table1 b
    GROUP BY b.[Name] HAVING a.[Name]=b.[Name] )

结果顺利出来结果
往往是不起眼的问题,很费脑


原文转自:http://www.ltesting.net