SQL除去最大值与最小值求均值

本文介绍了一种SQL技巧,通过排除数据集中的最大值和最小值来计算更准确的平均工资。使用子查询从员工表中找出最高和最低薪资,再计算除去这两个极端值后的平均薪资。适用于数据分析和报表制作。
  1. 除去所有重复的最大值和重复的最小值,然后求平均
SELECT avg(salary)
FROM employees
WHERE salary not in (
(SELECT min(salary) FROM employees),
(SELECT max(salary) FROM employees))

  1. 对于多个重复的最大值和最小值,仅需要除去一个,然后求平均值,那么就可以利用一些数学上的知识帮助计算
SELECT (sum(salary) - max(salary) - min(salary)) / (count(salary)-2)
FROM employees

参考来源:极客教程:SQL除去最大值与最小值求均值

SQL 中,可以使用聚合函数来查询总数、最小值最大值和平均值。以下是一些常见的实现方法: ### 计算总数 使用 `SUM()` 函数可以计算某列值的总和。例如,计算 `employee` 表中员工工资的总和: ```sql SELECT SUM(nvl(e.emp_wage,0)) as total_sal FROM employee e; ``` 若要按部门分组计算各部门员工工资的总和,可以结合 `GROUP BY` 关键字: ```sql SELECT d.dept_name, SUM(nvl(e.emp_wage,0)) as total_sal FROM employee e LEFT JOIN department d ON e.dept_id = d.dept_id GROUP BY d.dept_name; ``` ### 计算最小值 使用 `MIN()` 函数能获取某列的最小值。例如,获取 `employee` 表中员工工资的最小值: ```sql SELECT MIN(emp_wage) as min_sal FROM employee; ``` ### 计算最大值 使用 `MAX()` 函数可得到某列的最大值。`MAX()` 函数还能返回任意列中的最大值,包括字符类型列,对字符类型数据比较时按 ASCII 码值大小比较,从 a~z,a 的 ASCII 码最小,z 的最大,比较时先比较第一个字符,若相等则继续比较下一个字符,直到两个字符不相等或字符结束。例如,获取 `employee` 表中员工工资的最大值: ```sql SELECT MAX(emp_wage) as max_sal FROM employee; ``` ### 计算平均值 使用 `AVG()` 函数可以计算某列的平均值。例如,计算 `employee` 表中员工工资的平均值: ```sql SELECT AVG(emp_wage) as avg_sal FROM employee; ``` 若要计算不包含最大值最小值均值,可使用子查询结合 `NOT IN` 排除最高和最低工资后再计算平均值。若存在重复的最高或最低工资,这些值都会被排除。若只想排除一个最高和最低值,可从 `SUM` 中减去它们再做除法。以下是使用子查询排除最高和最低工资计算平均值的示例: ```sql SELECT AVG(salary) FROM ( SELECT salary FROM salaries WHERE salary NOT IN ( SELECT MIN(salary) FROM salaries ) AND salary NOT IN ( SELECT MAX(salary) FROM salaries ) ) subquery; ``` 在 Hive SQL 中,也可以使用窗口函数去除最大值最小值后计算平均 `salary`: ```sql SELECT AVG(salary) FROM ( SELECT salary, MIN(salary) OVER() min_sal, MAX(salary) OVER() max_sal FROM salaries WHERE to_date = '9999-01-01' ) tmp WHERE salary <> min_sal AND salary <> max_sal; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值