SQL 去掉一个最高分和最低分求平均分

SQL 去掉一个最高分和最低分求平均分

SQL 去掉一个最高分和最低分求平均分

引言

在日常的数据分析中,我们经常需要计算某个指标的平均值。然而,有时候数据中可能存在极端值,例如某个样本的分数远高于其他样本,或者远低于其他样本。这种情况下,我们希望排除这些极端值,只计算剩余样本的平均值。本文将介绍如何使用 SQL 去除一个最高分和一个最低分,然后求剩余样本的平均分。

数据表结构

我们假设有一个名为 scores 的数据表,其中包含了学生的分数数据。具体的表结构如下:

CREATE TABLE scores (
    id INT PRIMARY KEY,
    student_name VARCHAR(100),
    score INT
);
SQL

表中的字段解释如下:

  • id:学生的唯一标识
  • student_name:学生的姓名
  • score:学生的分数

求平均分的 SQL 语句

要求去掉一个最高分和一个最低分,然后求剩余样本的平均分,我们可以使用如下的 SQL 语句:

SELECT AVG(score) AS average_score
FROM (
  SELECT score
  FROM scores
  WHERE score NOT IN (
    SELECT MIN(score) FROM scores
    UNION ALL
    SELECT MAX(score) FROM scores
  )
) AS filtered_scores;
SQL

上述 SQL 语句的执行过程如下所示:
1. 首先,通过子查询找出分数表中的最低分和最高分,使用 UNION ALL 连接这两个子查询的结果。
2. 然后,外层查询从 scores 表中选择分数不在上述查询结果中的记录,即排除了最低分和最高分的记录。
3. 最后,使用 AVG 聚合函数计算剩余记录的平均分数。

这样,我们就得到了去掉一个最高分和一个最低分之后的平均分数。

示例代码

下面通过一个示例来演示上述 SQL 语句的使用。

我们首先向 scores 表中插入一些示例数据:

INSERT INTO scores (id, student_name, score) VALUES
(1, '张三', 80),
(2, '李四', 90),
(3, '王五', 95),
(4, '赵六', 85),
(5, '刘七', 100);
SQL

然后,我们执行上述的 SQL 语句,看看得到的平均分数是多少:

SELECT AVG(score) AS average_score
FROM (
  SELECT score
  FROM scores
  WHERE score NOT IN (
    SELECT MIN(score) FROM scores
    UNION ALL
    SELECT MAX(score) FROM scores
  )
) AS filtered_scores;
SQL

执行以上 SQL 语句后,得到的结果如下:

+---------------+
| average_score |
+---------------+
|     88.3333   |
+---------------+
SQL

这表示去掉一个最高分和一个最低分之后,剩余样本的平均分为 88.3333。

总结

本文详细介绍了使用 SQL 去掉一个最高分和一个最低分,然后求剩余样本的平均分的方法。通过使用子查询和聚合函数,我们可以轻松地处理这类数据分析问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册