要计算平均值时去掉最大值和最小值,可以使用SQL中的子查询和聚合函数结合。以下是具体步骤:
- 使用子查询得到最大值和最小值:
使用如下语句得到数据表中列column的最大值和最小值:
SELECT MAX(column), MIN(column) FROM table;
- 使用HAVING语句筛选掉最大值和最小值:
把上面子查询的结果作为过滤条件传入HAVING语句中:
SELECT column FROM table
HAVING column NOT IN (SELECT MAX(column) FROM table UNION SELECT MIN(column) FROM table)
该查询语句将返回去掉最大和最小值后的列column的所有行。
- 计算平均值:
在第2步查询语句中,我们已经得到了去掉最大和最小值后的所有行,使用聚合函数AVG()求得平均值:
SELECT AVG(column) FROM (
SELECT column FROM table
HAVING column NOT IN (SELECT MAX(column) FROM table UNION SELECT MIN(column) FROM table)
) as subquery;
该查询语句将返回去掉最大和最小值后的平均值。
下面给出两条实例:
- 假设有以下数据表grade:
id | name | grade |
---|---|---|
01 | A | 85 |
02 | B | 90 |
03 | C | 92 |
04 | D | 80 |
05 | E | 70 |
06 | F | 95 |
计算去掉最大和最小值后的平均分数,可以使用以下查询语句:
SELECT AVG(grade) FROM (
SELECT grade FROM grade
HAVING grade NOT IN (SELECT MAX(grade) FROM grade UNION SELECT MIN(grade) FROM grade)
) as subquery;
返回结果为:87.33
- 假设有以下数据表salary:
id | name | salary |
---|---|---|
01 | A | 6000 |
02 | B | 8000 |
03 | C | 5000 |
04 | D | 6500 |
05 | E | 5500 |
06 | F | 7000 |
计算去掉最大和最小值后的平均工资,可以使用以下查询语句:
SELECT AVG(salary) FROM (
SELECT salary FROM salary
HAVING salary NOT IN (SELECT MAX(salary) FROM salary UNION SELECT MIN(salary) FROM salary)
) as subquery;
返回结果为:6500.00
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 计算平均值时去掉最大值和最小值 - Python技术站