思路:
第一,获取当前员工的最大值max(salary)、最小值min(salary);
第二,排除最大值、最小值后的salary取平均值avg(salary)。
eg.
查找排除最大、最小salary之后的当前(to_date = '9999-01-01' )员工的平均工资avg_salary。
方法一:
select avg(salary) as avg_salary
from salariesm
where to_date='9999-01-01'
and salary not in ( select max(salary)
from salariesm
where to_date='9999-01-01')
and salary not in( # 两个and
select min(salary)
from salariesm
where to_date='9999-01-01');或换种形式:
select avg(salary) as avg_salary
from salariesm
where to_date='9999-01-01'
and salary not in ( select max(salary)
from salariesm
where to_date='9999-01-01'
union # 通过union连接
select min(salary)
from salariesm
where to_date='9999-01-01');或换种形式:
select avg(salary) as avg_salary
from salariesm
where to_date='9999-01-01'
and salary not in ( (select max(salary)
from salariesm
where to_date='9999-01-01'), # ","通过逗号并列两个值
(select min(salary)
from salariesm
where to_date='9999-01-01'));
换种形式:
select avg(salary) avg_salary from (select salary ,max(salary) over() max_salary ,min(salary) over() min_salary from salariesm where to_date = '9999-01-01' ) as a # 封装成一个表 where salary != max_salary and salary != min_salary;
方法二:
select ((sum(salary)-max(salary)-min(salary))/(count(salary)-2)) as avg_salary # 直接通过计算逻辑进行计算 from salary where to_date='9999-01-01';

京公网安备 11010502036488号