不用聚合函数求最高工资

对于emp 表,不用聚合函数求出最高工资

如果使用聚合函数的话,求出最高工资比较方便

select max(sal) from emp;

如果不使用聚合函数的话,该从哪个方向出发呢?

可以排序,然后从排序后的结果中取工资最高的;可以取出除最高工资之外的所有工资,然后再排除,剩下最高工资。

method1  按工资收入降序排列

select * from emp order by sal desc

工资最高的5000 就排在第一个,接下来再取第一个即可

select a.sal from (select * from emp order by sal desc) a where rownum = 1;

method2  取最高工资之外的所有工资

select e2.sal from emp e1,emp e2 where e1.sal>e2.sal;

这里采用自连接,判断条件 e1.sal > e2.sal,结果取的是e2.sal,这注定最高工资不可能出现在结果集中

然后 再在emp 表中,排除掉上面结果集的sal,剩余的就是最高的sal了

select e.sal from emp e where e.sal not in(select e2.sal from emp e1,emp e2 where e1.sal>e2.sal);

看到第二种方法,突然想到第三种方法,那就是用上distinct 和 minus

method3  沿用 method2 的思路

select distinct e2.sal from emp e1,emp e2 where e1.sal>e2.sal;

再用emp 中所有sal 和 上面集合中的sal 求minus

select distinct sal from emp
minus
select distinct e2.sal from emp e1,emp e2 where e1.sal>e2.sal;

好了,这里介绍三种方法,你还有其它的方法吗,分享出来吧,一起学习。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 17:44:20

不用聚合函数求最高工资的相关文章

不用sizeof()函数求当前主机上的一个int占用几个字节

1)宏定义实现:    #define MySizeof(Value) (char*)(&Value + 1) - (char*)&Value    (char*)&Value返回Value的地址的第一个字节, (char*)(&Value + 1)返回的是Value的地址的下一个地址的第一个字节 #include <iostream> using namespace std; #define my_sizeof(L_Value) (char* )(&L

四.Oracle聚合函数和内外全连接

1.聚合函数 同时对一组数据行进行操作,对每组行返回一行输出结果,叫做分组函数.(将多行数据分成一行或多行,每组行只返回一行结果) 1.1聚合函数不能出现在where字句中 1.2常用的聚合函数: count: 表示返回满足条件的总行数,(注:建议用rowid统计总行数,因为它代表唯一的物理地址,或者用唯一标识符(主键);) 使用 * 效率慢,因为它先会去select * from all_tab_cols(字典表)去搜索表有那些列,然后再去分析那个列查询速度更快 例:select count(

2、SQL基础整理(聚合函数)

聚合函数 --求平均 select  AVG(age) as 年龄 from xuesheng select AVG(chinese) as 语文 from xuesheng where class = 1 *只能对数字类型的进行操作 --求个数 select COUNT(*) from xuesheng/*查询表中有多少条数据*/ select COUNT(*) from xuesheng where name like '王%' select COUNT(distinct class) fr

oracle语句中的聚合函数以及分组group by的使用实例

1 create table t_class2( 2 name varchar2(255), 3 subject varchar2(255), 4 score integer, 5 stuid integer 6 ) 7 8 insert into t_class2 values('张三','数学',89,1); 9 insert into t_class2 values('张三','语文',80,1); 10 insert into t_class2 values('张三','英语',70,1

SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数

(二) SQL语句  模糊查询  空值处理  聚合函数 自己学习笔记,转载请注明出处,谢谢!---酸菜 SQL :结构化查询语言(Structured Query Language),关系数据库管理系统的标准语言. Sybase与Mircosoft对标准SQL做了扩展:T-SQL (Transact-SQL); 注:①SQL对大小写的敏感取决于排序规则,一般不敏感; ②SQL对单引号的转义,用两个单引号来表示一个单引号; ③SQL执行顺序: 1→2→3→4 select  * ---------

sql中的 开窗函数over() 聚合函数 排名函数

开窗函数与聚合函数一样,都是对行的集合组进行聚合计算.它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列.反正我理解这个函数已经使用好子查询或者是其它方式求得聚合列的值给我合并. 以书中的例子一步一步来介绍,假设要计算所有人员的总数,我们可以执行下面的SQL语句: SELECT COUNT(FName) FROM T_Person 这种方式比较直接,只返回一个聚合列的值,没有任

Android数据库高手秘籍(八)——使用LitePal的聚合函数

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40614197 在上一篇文章当中,我们已经把LitePal查询操作的所有用法都学习完了,很显然,LitePal帮我们提供了非常强大的查询API,使得我们可以极度轻松地完成各种类型的查询.但是呢,在SQL语句当中,有一种查询是比较特殊的,就是聚合函数查询,它不像传统查询一样是将表中的某些列的数据查询出来,而是将查询结果进行聚合和统计,最终将统计后的结果进行返回.因此,任何一个关系型数

SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

原文:SQL Server 2008 R2--PIVOT 行转列 以及聚合函数的选择 ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性. 未经作者同意请勿修改(包括本声明),保留法律追究的权利. 未经作者同意请勿用于学术性引用. 未经作者同意请勿用于商业出版.商业印刷.商业引用. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文

Sql Service的艺术(三) SQL聚合函数的应用

SQL提供的聚合函数有求和,最大值,最小值,平均值,计数函数等. 聚合函数及其功能: 函数名称 函数功能 SUM() 返回选取结果集中所有值的总和 MAX() 返回选取结果集中所有值的最大值 MIN() 返回选取结果集中所有值的最小值 AVG() 返回选取结果集中所有值的平均值 COUNT() 返回选取结果集中行的数目 学习本节所需要的两张表: CREATE TABLE TEACHER ( ID INT IDENTITY (1,1) PRIMARY KEY , --主键,自增长 TNO INT