查询最大值SQL语句写法

案例1.
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] )
结果顺利出来。

案例2.

最简单的直接查询出最大值:
select max(id) fromt_b_h_da ta_config
需要得到最大值加一,以便进行后续操作:
select value(cast(max(id) as int)+1,1) from t_b_h_da ta_config
因id是字符串类型的,要加一需先转换类型( cast(max(id) as int )),value逗号后面的是当前没有记录时默认id为1.
select value(max(cast(id as int))+1,1) from t_c_m_cx_second   将Max放在cast外面,先转换为int型后找最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值