问题:
  数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度。
建表语句

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版本:

--创建表
declare
tableNum number;
begin
select count(1)
into tableNum
from user_tables t
where t.TABLE_NAME = 'USERS';
dbms_output.put_line('Table Num:' || tableNum);
if (tableNum = 0) then
execute immediate 'create table USERS(
id number(10),
name varchar2(20),
height number(3),
constraint USERS_ID_PK primary key (id))';
else
truncate table USERS;
end if;
select count(1)
into tableNum
from user_tables t
where 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 j
where j.height < (select max(s.height) from users s)

select g.height
from (select j.height
from users j
where j.height not in (select MAX(j.height) from users j)
order by j.height desc) g
where /*rownum < 2*/
rownum = 1;

select g.height
from (select t.height
from (select j.height
from users j
where rownum < 3
order by j.height desc) t
order by t.height asc) g
where rownum < 2
/* rownum=1*/
;

sql查询第二大的记录(转)的更多相关文章

  1. [SQL]查询及删除重复记录的SQL语句

    一:查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ...

  2. sql查询上一条记录和下一条记录

    上一条记录的SQL语句: * from news where newsid<id order by newsid DESC 下一条记录的SQL语句: * from news where news ...

  3. SQL查询符合条件的记录的总数

    1. select count(*) from table;    //统计元组个数 2. select count(列名) from table;  //统计一列中值的个数 3. select co ...

  4. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  5. sql查询未走索引问题分析之查询数据量过大

    前因: 客户咨询,有一个业务sql(代表经常被执行且重要),全表扫描在系统占用资源很高(通过ash报告查询得到信息) 思路: 1.找到sql_text,sql_id 2.查看执行计划 3.查询sql涉 ...

  6. Oracle 查询并删除重复记录的SQL语句

    查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select  ...

  7. SQL查询重复记录

    假设现有一张人员表(表名:Person),若想将姓名.身份证号.住址这三个字段完全相同的记录查找出来,使用 1: SELECT p1.* 2: FROM persons p1,persons p2 3 ...

  8. 如何编写更好的SQL查询:终极指南-第二部分

    上一篇文章中,我们学习了 SQL 查询是如何执行的以及在编写 SQL 查询语句时需要注意的地方. 下面,我进一步学习查询方法以及查询优化. 基于集合和程序的方法进行查询 反向模型中隐含的事实是,建立查 ...

  9. SQL查询多条不重复记录值简要解析【转载】

    转载http://hi.baidu.com/my_favourate/item/3716b0cbe125f312505058eb SQL查询多条不重复记录值简要解析2008-02-28 11:36 以 ...

随机推荐

  1. 在汉澳sinox2014建立ZFS高可靠文件存储系统

    在汉澳sinox2014建立ZFS高可靠文件存储系统 汉澳sinox2014能够用比較小的固态硬盘安装,文件系统能够用zfs系统存放. 请准备一些硬盘,比方三块SCSI硬盘:da0,da1,da2 如 ...

  2. 剖析html对标准标签和自定义标签闭合与不闭合渲染问题

    昨天在修改去年写的系统的时候无意中看到了当时写的一个利用标准标签未闭合在单元格内把整个单元格颜色渲染成红色的效果,如下: 当时的问题是从后台返回来的是个int整数而%是写在页面上的如图 这 时候就出现 ...

  3. 矩形类定义【C++】

    Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. Inp ...

  4. 《数字图像处理原理与实践(MATLAB文本)》书代码Part7

    这篇文章是<数字图像处理原理与实践(MATLAB文本)>一本书的代码系列Part7(由于调整先前宣布订单,请读者注意分页程序,而不仅仅是基于标题数的一系列文章),第一本书特色186经225 ...

  5. MongoDB时间处理问题

    MongoDB保存到数据库的时候,默认为UTC时间,在数据库保存时,会和当前时间有个间隔,差距为8小时. 在读取的时候,需要再次转换回来,比较麻烦. 其实,Mongo本身就已经提供了相应的处理方法,即 ...

  6. dev XtraMessageBox按钮显示中文

    dev的XtraMessageBox控件使用起来很美观,但默认显示确定的是英文,如下图: 通过下面代码可使“OK”显示为中文:首先创建一个继承自Localizer的类: using DevExpres ...

  7. 【干货】免费获得WebStorm软件

    内容提要: 1.WebStorm简介 2.如何免费获得WebStorm 3.利用学生身份免费获得正式版WebStorm WebStorm简介 WebStorm 是一款前端开发 IDE(集成开发环境), ...

  8. c# winform 中的 工具栏自动隐藏 splitter用法 带源码

    c# winform 中的 工具栏自动隐藏 splitter用法 带源码 代码下载地址 http://download.csdn.net/detail/simadi/7649313

  9. RH133读书 笔记(3) - Lab 3 Configuring the kernel

    Lab 3 Configuring the kernel Goal: Develop skills tuning the /proc filesystem. Gain some experience ...

  10. BZOJ 1901 Dynamic Rankings 树董事长

    标题效果:间隔可以改变k少 我的两个天树牌主席... 隔断Count On A Tree 之后我一直认为,随着树的主席的变化是分域林木覆盖率可持久段树. .. 事实上,我是误导... 尼可持久化线段树 ...