`
suxing
  • 浏览: 210253 次
  • 性别: 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去重

    本文将详细介绍几种SQL去重的方法,并通过具体的示例来解释每种方法的应用场景及其背后的原理。 ### 方法一:使用 `SELECT DISTINCT` `SELECT DISTINCT` 是最常用的去重方式之一,它可以返回指定列中的不同值。...

    sql分页的几种方法

    ### SQL分页的几种方法 #### 背景介绍 在数据库操作中,分页是一项非常常见的需求。尤其是在处理大量数据时,为了提高查询效率、减少服务器负担,并为用户提供更好的体验,分页变得尤为重要。SQL提供了多种实现分页...

    SQL求比例 qiuqianquan

    通过对给定文件中的 SQL 代码进行解析,我们可以看出“求比例”的实现方式主要是利用 SQL 中的聚合函数如 `SUM` 和 `COUNT`,以及分组查询 `GROUP BY` 来完成。同时,合理的数据类型选择如 `decimal` 可以确保计算...

    50种方法巧妙优化你的SQL Server数据库

    ### 50种方法巧妙优化你的SQL Server数据库 在日常的数据库管理与维护工作中,我们经常会遇到查询速度慢的问题,这不仅影响了系统的性能,也降低了用户体验。本文将基于给出的信息,详细介绍可能导致查询速度变慢的...

    sql大全 sql大全

    在SQL中,我们有几种主要的语句类型: 1. **DQL(Data Query Language)**:查询数据,如`SELECT`语句用于获取表中的信息。 2. **DML(Data Manipulation Language)**:数据操纵,包括`INSERT`(插入)、`UPDATE`...

    sqlserver内存释放

    在 SQL Server 中,主要存在以下几种类型的内存缓存: 1. **数据缓存**:当执行 SELECT 查询时,SQL Server 会将查询涉及的数据页加载到内存中。这样做可以避免后续查询同一数据页时重复访问磁盘,显著提升查询速度...

    阿里云odpsSql手册1

    显式类型转换是用cast将一种数据类型的值转换为另一种类型的值的行为,在MaxCompute SQL中支持的显式类型转换包括: * Bigint、Double、String、Datetime、Boolean、Decimal之间的转换 * 显式类型转换可以将double...

    SQL复杂SQL语句

    主要有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)等几种类型。 #### 示例1:内连接 - 使用BETWEEN进行范围匹配 ```sql SELECT * FROM salgrades s1 JOIN ( SELECT ...

    sql取小数点后N位.txt

    在开始介绍具体的实现方法之前,我们先来了解一下SQL中与本主题相关的几种数据类型: - **Numeric(precision,scale)**:其中`precision`表示整个数字的最大长度(包括小数点前后),而`scale`表示小数点后的位数。 ...

    arcgis中的sql语句

    - **聚合函数**:如求总数(`COUNT`)、求和(`SUM`)、平均值(`AVG`)、最大值(`MAX`)和最小值(`MIN`)。 ##### 3. 高级查询运算符 除了基本的DML和DQL语句外,ArcGIS还支持一些高级查询运算符,如: - **UNION**:...

    关于SQL Server SQL语句查询分页数据的解决方案

    该方法相对于第一种方法而言,可能稍微慢一些,因为它需要计算最大值并再次进行筛选。但在某些情况下,这种方法可能更优,特别是当`fldSerialNo`字段具有较好的索引时。 ### 使用TOP与ORDER BY组合实现分页 另一种...

    sql编程的几个实例

    8. **聚合函数**:除了COUNT(),其他聚合函数如SUM()计算总和,AVG()计算平均值,MAX()和MIN()找出最大值和最小值。 9. **索引**:索引用于加速查询速度,可以在列上创建。`CREATE INDEX idx_Products_Price ON ...

    用SQL实现分页的三种方法

    此方法利用了数据表中的`ID`字段,通过设定一个起始点(通常是上一页的最大`ID`值),然后选取满足条件的前几条记录作为当前页的数据。这种方法同样适用于主键为标识列的情况。 **具体实现** 以下示例展示了如何...

    SQL emp表的几个重要的操作

    `GROUP BY`子句用于按某一列或多列进行分组,而聚合函数如`AVG`和`MAX`则分别用于计算平均值和最大值。这样的查询对于人力资源分析非常有用,可以帮助了解不同部门的薪资分布情况。 ### 4. 复杂分组与筛选 SQL语句...

    SQL_LOADER教程

    SQL*LOADER有两种主要的工作模式:传统路径(CONVENTIONAL PATH)和直接路径(DIRECT PATH),其中直接路径提供了更快的速度,特别适合大型数据仓库的数据加载需求。 #### 二、SQL*LOADER的基本概念与命令 SQL*...

    mysql,sqlserver,oracle三种数据库的大对象存取

    其中,BLOB类型可以存储最多2^16(65,535)个字节的数据,而MEDIUMBLOB则可以存储2^24(16,777,215)字节,LONGBLOB可以存储的最大值为2^32 - 1(4,294,967,295)字节。在默认配置下,MySQL限制单个包大小为1MB,...

    程序员的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支持...

    01_【基本SQL语句】SQL语法练习(一)

    2. **数值函数**:如`SUM()`计算数字列的总和,`AVG()`求平均值,`MIN()`和`MAX()`找出最小值和最大值。 3. **日期/时间函数**:如`DATE_FORMAT()`格式化日期,`YEAR()`提取年份,`MONTH()`和`DAY()`分别获取月份和...

    SQL中GROUP BY的用法

    4. MAX:返回一组非 NULL 值中的最大值。 5. MIN:返回一组非 NULL 值中的最小值。 6. SUM:返回一个表达式中所有非 NULL 值的总和。 7. STDEV:根据数据母体的样本返回由表达式提供的所有值的标准差。 8. STDEVP:...

    sqlserver入门到精通txt

    常用的聚合函数包括COUNT(计数)、SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、VARIANCE(方差)和STDDEV(标准差)。 4. 字符函数:字符函数主要用于处理字符串数据。文件中提到了如CHR、CONCAT...

Global site tag (gtag.js) - Google Analytics