sql查询最大的见多了,查询第二的呢??? |
您所在的位置:网站首页 › oracle查询倒数第二条 › sql查询最大的见多了,查询第二的呢??? |
问题: 数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度。
建表语句 create table users ( id int identity(1,1) primary key, name varchar(20), height float );
数据库表:用户表(Users) 数据库字段 字段意义 数据类型 约束 备注 id 编号 int 主键 自增长 name 姓名 VARCHAR(20)
height 身高 float
测试数据 insert into users(name,height) values('zhangsan',182); insert into users(name,height) values('李四',122); insert into users(name,height) values('张强',132); insert into users(name,height) values('王明',122); insert into users(name,height) values('姜明',182); insert into users(name,height) values('蒋克龙',182); insert into users(name,height) values('zhang',182); insert into users(name,height) values('安安',181); insert into users(name,height) values('健健',181); insert into users(name,height) values('明明',181); insert into users(name,height) values('小小',177); insert into users(name,height) values('旺旺',123); insert into users(name,height) values('卡纳',175); insert into users(name,height) values('文鑫',166); insert into users(name,height) values('健明',155); insert into users(name,height) values('拉拉',152); insert into users(name,height) values('青青',132); insert into users(name,height) values('乐乐',155); insert into users(name,height) values('KK',123); insert into users(name,height) values('FF',122); insert into users(name,height) values('Lily',152);
查询语句 1、查询出没有重复值的第二名,即假如最高的身高是182,有几个人同时身高是182,则查出身高小于182的的最高的身高值。 1>、方式1: select MAX(height) from users where height 、方式2: select top 1 height from users where height not in (select MAX(height) from users) order by height desc;意义:先查询出最高的身高,排除该身高,然后将数据进行排序(降序),查询出当前的第一条数据。
3>、方式3:使用RANK()函数 rank函数考虑到了over子句中排序字段值相同的情况,值相同的时候RANK函数的到的值相等。 select top 1 height from ( select *,RANK() OVER (ORDER BY height desc) AS Rank from users ) t where rank1意义:给每一个记录一个行号,使用RANK函数,去掉身高值最高的记录(重复值的rank函数获得值相同)。
2、查询出可能与最高身高值相同的第二名,即假如身高最高是182,有几个人同时是182身高,第二名依然是182. 1>、方式1: select top 1 * from (select top 2 height from users order by height desc) s order by height asc;意义:将数据按照身高(降序)排列,查询出前面的两项,然后将这两项按照身高升序,查询第一项目。
2>、方式2:row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号(不考虑重复值)。 select top 1 height from ( select *,ROW_NUMBER() OVER (ORDER BY height desc) AS Rank from users ) t where rank1意义:给每一个记录一个行号ROW_NUMBER使用函数,去掉身高值最高的记录(重复值的ROW_NUMBER函数获得值不同)。 致谢:感谢您的耐心阅读!假如有更好的答案希望不吝赐教。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |