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

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

朋友出了个题,各有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] )

结果顺利出来结果

往往是不起眼的问题,很费脑

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航