`
suxing
  • 浏览: 202761 次
  • 性别: Icon_minigender_1
  • 来自: 遵义
社区版块
存档分类
最新评论

SQL求最大值的几种方式

 
阅读更多

有表如下:

create table students
(sno int,
sname varchar(10),
age int);


insert into students values(1,'AARON',20);
insert into students values(2,'CHUCK',21);
insert into students values(3,'DOUG',20);
insert into students values(4,'MAGGIE',19);
insert into students values(5,'STEVE',22);
insert into students values(6,'JING',18);
insert into students values(7,'BRIAN',21);
insert into students values(8,'KAY',20);
insert into students values(9,'GILLIAN',20);
insert into students values(10,'CHAD',21);

 

求年龄最大的学生?

 

方式一,我的第一反应是使用聚焦函数max,相信很多人和我一样。

select * from students where age=(select max(age) from students);

 简单明了,两次全表扫描,成本6

 

方式二,有没有不使用max的方法来求最大呢?使用自连接加比较。

select * from students 
where age not in (select a.age from students a, students b where a.age< b.age);

 先做笛卡尔集,求年龄比任一个小的,再排除他们。三次全表扫描,成本12

 

方式二的改良

select * from students s1 
where not exists (select 1 from students s2 where s1.age<s2.age);

 两次全表扫描,成本8

 

方式三,使用窗口函数

select * from (select students.*,max(age)over() oldest from students) 
where age=oldest;

 一次全表扫描,成本3

 

我本人也有些意料之外,没想到窗口函数威力巨大。

总结:

优先使用窗口函数,然后才是聚集函数;能用exists,就别用in;尽量别做笛卡尔集。

分享到:
评论

相关推荐

    程序员的SQL金典.rar

     9.2.1 为每种数据库编写不同的SQL语句  9.2.2 使用语法交集  9.2.3 使用SQL实体对象  9.2.4 使用ORM工具  9.2.5 使用SQL翻译器  9.3 CowNewSQL翻译器  9.3.1 CowNewSQL支持的数据类型  9.3.2 CowNewSQL支持...

    程序员的SQL金典4-8

     9.2.1 为每种数据库编写不同的SQL语句  9.2.2 使用语法交集  9.2.3 使用SQL实体对象  9.2.4 使用ORM工具  9.2.5 使用SQL翻译器  9.3 CowNewSQL翻译器  9.3.1 CowNewSQL支持的数据类型  9.3.2 CowNewSQL支持...

    经典SQL语句大全

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...

    Microsoft SQL Server 2005 Express Edition SP3

    上一步 (5276) 中的 Last Counter 值必须与以下注册表项内 Perflib\009 中 Counter 项的最大值相等,上一步 (5277) 中的 Last Help 值必须与以下注册表项内 Perflib\009 中 Help 项的最大值相等:[HKEY_LOCAL_...

    sql2005全文检索.doc

     实现网站全文检索有几种常见方案,比如应用数据库全文检索,开源搜索引擎,使用Google API等, 本文我们将就如何使用SQL Server 2005多快好省地建立网站全文检索展开探讨。 二、全文检索技术说明  1、应用背景 ...

    经典全面的SQL语句大全

    这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码): SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"  注意:以上...

    达梦数据库_SQL语言手册

    因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发...

    sql2000 Log Explorer4.2(含注册码)+汉化

    l 可以用普通的SQL登录方式添加在线日志(Online Log), l 直接选择LDF文件来添加离线日志(OffLine Log) l 添加备份文件 登录之后界 功能介绍: 1、 Log Summary 日志文件的概要信息。 2、 Load ...

    程序员的SQL金典6-8

     9.2.1 为每种数据库编写不同的SQL语句  9.2.2 使用语法交集  9.2.3 使用SQL实体对象  9.2.4 使用ORM工具  9.2.5 使用SQL翻译器  9.3 CowNewSQL翻译器  9.3.1 CowNewSQL支持的数据类型  9.3.2 CowNewSQL支持...

    程序员的SQL金典7-8

     9.2.1 为每种数据库编写不同的SQL语句  9.2.2 使用语法交集  9.2.3 使用SQL实体对象  9.2.4 使用ORM工具  9.2.5 使用SQL翻译器  9.3 CowNewSQL翻译器  9.3.1 CowNewSQL支持的数据类型  9.3.2 CowNewSQL支持...

    程序员的SQL金典3-8

     9.2.1 为每种数据库编写不同的SQL语句  9.2.2 使用语法交集  9.2.3 使用SQL实体对象  9.2.4 使用ORM工具  9.2.5 使用SQL翻译器  9.3 CowNewSQL翻译器  9.3.1 CowNewSQL支持的数据类型  9.3.2 CowNewSQL支持...

    SQL 优化原则

    在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。  二、SQL语句编写注意问题  下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使...

    Log Explorer for SQL Server v4.22 含注册机

    l 可以用普通的SQL登录方式添加在线日志(Online Log), l 直接选择LDF文件来添加离线日志(OffLine Log) l 添加备份文件 登录之后界 功能介绍: 1、 Log Summary 日志文件的概要信息。 2、 Load Analysis 列出...

    2009达内SQL学习笔记

    最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod_name FROM Products WHERE vend_id IN(‘DELL’,’RBER’,’TTSR’); 八、单行函数: 函数一般在数据...

    MYSQL常用命令大全

    8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql&gt; LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql&gt;use database; mysql&gt;source d:/mysql....

    SQL语法大全

    MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" set rs=conn....

    PL/SQL Developer8.04官网程序_keygen_汉化

     PL/SQL Developer为简化日常开发专门提供了几种工具。使用这些工具,您可以重新编译全部不合法对象、查找数据库源中文本、导入或导出表格、生成测试数据、导出文本文件、监控dbms_alert和dbms_pipe事件、浏览会话...

    sql经典语句一部分

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...

    数据库操作语句大全(sql)

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...

Global site tag (gtag.js) - Google Analytics