不用聚合函式求最高工資

2022-04-08 03:20:09 字數 925 閱讀 2742

對於emp 表,不用聚合函式求出最高工資

如果使用聚合函式的話,求出最高工資比較方便

select max(sal) from emp;

如果不使用聚合函式的話,該從哪個方向出發呢?

可以排序,然後從排序後的結果中取工資最高的;可以取出除最高工資之外的所有工資,然後再排除,剩下最高工資。

select * from emp order by sal desc工資最高的5000 就排在第乙個,接下來再取第乙個即可

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

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

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;

好了,這裡介紹三種方法,你還有其它的方法嗎,分享出來吧,一起學習。

部門最高工資的員工

employee 表包含所有員工資訊,每個員工有其對應的 id,salary 和 department id。id name salary departmentid 1 joe 70000 1 2 henry 80000 2 3 sam 60000 2 4 max 90000 1 departmen...

求第二高工資

解題思路 求出最大工資a,select top 1 salary from employee where salary 值得注意的乙個問題是 如果不存在第二高的薪水 怎麼返回null?第一次這樣寫是不能返回null的 select top 1 salary from employee where s...

1491 去掉最低工資和最高工資後的工資平均值

示例1 輸入 salary 4000,3000,1000,2000 輸出 2500.00000 解釋 最低工資和最高工資分別是 1000 和 4000 去掉最低工資和最高工資以後的平均工資是 2000 3000 2 2500 示例2 輸入 salary 1000,2000,3000 輸出 2000....