sql查询第二大的记录(转)
问题:
数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度。
建表语句
create table users (id int identity(1,1) primary key,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 < (select MAX(height) from users );
解析:先查询出最高的身高值,然后查询身高小于该值的最高身高。
2>、方式2:
select top 1 height from users where height not in (select MAX(height) from users) order by height desc;
解析:先查询出最高的身高,排除该身高,然后将数据进行排序(降序),查询出当前的第一条数据。
3>、方式3:
查询出可能与最高身高值相同的第二名,即假如身高最高是182,有几个人同时是182身高,第二名依然是182.
select top 1 * from (select top 2 height from users order by height desc) s order by height asc;
解析:将数据按照身高(降序)排列,查询出前面的两项,然后将这两项按照身高升序,查询第一项目。
http://www.cnblogs.com/0201zcr/p/4820706.html
Oracle版本:
--创建表 declaretableNum number; beginselect count(1)into tableNumfrom user_tables twhere t.TABLE_NAME = 'USERS';dbms_output.put_line('Table Num:' || tableNum);if (tableNum = 0) thenexecute immediate 'create table USERS(id number(10),name varchar2(20),height number(3),constraint USERS_ID_PK primary key (id))';elsetruncate table USERS;end if;select count(1)into tableNumfrom user_tables twhere t.TABLE_NAME = 'USERS';dbms_output.put_line('Table Num:' || tableNum);--insert into users (id,name, height) values (1,'zhangsan', 182); end;
这个块中,在创建表结构后,不能直接insert,会报表不存在
输出结果:
要显示dbms_output.put_line的输入内容,需要在command或sqlplus中执行set serverout on;
Table Num:0 Table Num:1 PL/SQL procedure successfully completed
insert into users (id,name, height) values (1,'zhangsan', 182);insert into users (id,name, height) values (2,'李四', 122);insert into users (id,name, height) values (3,'张强', 132);insert into users (id,name, height) values (4,'王明', 122);insert into users (id,name, height) values (5,'姜明', 182);insert into users (id,name, height) values (6,'蒋克龙', 182);insert into users (id,name, height) values (7,'zhang', 182);insert into users (id,name, height) values (8,'安安', 181);insert into users (id,name, height) values (9,'健健', 181);insert into users (id,name, height) values (10,'明明', 181);insert into users (id,name, height) values (11,'小小', 177);insert into users (id,name, height) values (12,'旺旺', 123);insert into users (id,name, height) values (13,'卡纳', 175);insert into users (id,name, height) values (14,'文鑫', 166);insert into users (id,name, height) values (15,'健明', 155);insert into users (id,name, height) values (16,'拉拉', 152);insert into users (id,name, height) values (17,'青青', 132);insert into users (id,name, height) values (18,'乐乐', 155);insert into users (id,name, height) values (19,'KK', 123);insert into users (id,name, height) values (20,'FF', 122);insert into users (id,name, height) values (21,'Lily', 152);
select max(j.height)from users jwhere j.height < (select max(s.height) from users s)
select g.heightfrom (select j.heightfrom users jwhere j.height not in (select MAX(j.height) from users j)order by j.height desc) gwhere /*rownum < 2*/rownum = 1;
select g.heightfrom (select t.heightfrom (select j.heightfrom users jwhere rownum < 3order by j.height desc) torder by t.height asc) gwhere rownum < 2 /* rownum=1*/ ;
sql查询第二大的记录(转)相关推荐
- oracle以10个记录为一页查询,SQL查询前10条记录(SqlServermysqloracle)语法分析
SQL查询前10条记录(SqlServer/mysql/oracle)语法分析 Sql Server : Sql代码 select top X * from table_name --查询前X条记录, ...
- SQL查询前10条记录(SqlServer/mysql/oracle)[语法分析]
Sql Server : Sql代码 select top X * from table_name --查询前X条记录,可以改成需要的数字. select top n * from (select t ...
- [SQL]查询及删除重复记录的SQL语句
一:查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (sel ...
- mysql查询第二大的_sql查询最大的见多了,查询第二的呢???
问题: 数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度. 建表语句 create tableusers ( idint identity(1,1) primary key ...
- SQL查询实现,记录排序编号
对数据表的查询实现(股票涨幅SQL查询),数据库记录排序编号,按照顺序计算相邻两行数据的相关属性值: set @count = 0; set @count1 = 0; select b.Date, c ...
- Python学习日志16 - 数据库SQL查询
Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志16课 - 数据库SQL查询 DQL ...
- sql查询之分页查询
文章目录 简介 limit 实例 专栏目录请点击 简介 分页查询我们一般会用到limit 一般分页查询的语法如下 SELECT 查询列表 FROM 表 ... LIMIT (page-1)*size, ...
- 记录一次慢SQL优化:大表关联小表->拆解为单表查询
前言: 最近一段时间总是会收到数据库CPU报警 一查发现有一个特别慢的SQL,调用的频率很高,并且查一次SQL15s以上,十分影响性能 SQL分析 这个sql是一个分页查询的sql,每次查出10条主表 ...
- sql查询 关联帖子_MySQL的大分页查询该如何优化?
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转自公众号:yangyidba 一 背景 大部分开发和DBA同行都对分页查询非常非常了解,看帖子翻页需 ...
最新文章
- codeforces 几道题目
- JWT token信息保存
- 2019-1、CentOS7+安装Tengine_2_3_2(Nginx 1_17_0)
- mysql中null与“空值”的坑
- C++中使用空格的建议
- 数学建模PPT(四)
- [黑客入门全程图解].吴自容,武新华.等编著.文字版,精确还原
- Java中集合retainall_Collection中的之retainAll()方法的理解
- android ca,Android CA证书安装流程
- 装了xmapp还需要装mysql吗_安装xamp之后,appach、mysql等问题的总结
- Java并发相关知识(多线程、锁、容器、工具)
- 抓包工具Fiddler下载安装
- Web测试需要兼顾的测试要点有哪些?
- ZKNUOJ 1019
- 跨境电商要讲好年轻人的“新故事”
- linux下使用docker-thunder-xware进行离线下载
- 弘辽科技:淘宝新手卖家该如何利用千人千面去引爆流量?
- 【PM】【需求】项目管理-需求:管理软件需求分析过程
- 调频扩频frequency-hopping-spread-spectrum
- 图灵奖得主Judea Pearl谈机器学习:不能只靠数据