数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
一个有趣的查找--搜索最大值所在的ID号

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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

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




相关文章

相关软件