查找所有成绩高于平均成绩的学生的SQL查询


给定的任务是使用SQL查找所有成绩高于平均成绩的学生。例如,如果一个班级的学生成绩为65、75、89、92和60,那么平均成绩将是76.2,查询应该返回成绩为89和92的记录。让我们一步一步开始。

创建表格

首先,我们需要使用**CREATE**语句创建一个名为**Students**的表格。此表包含三列:**Student_Id**、**Subject**和**Marks**。此表存储三种类型的科目,分数范围为0到100。

CREATE TABLE Students(
   Student_Id    INT NOT NULL,
   Subject       VARCHAR (20) NOT NULL,
   Marks         INT NOT NULL
);

填充表格

让我们使用**INSERT INTO**语句将记录插入此表,如下所示:

INSERT INTO (Student_Id, Subject, Marks ) Students VALUES 
(1, 'Math', 75), 
(2, 'Math', 82),
(3, 'Math', 95),
(4, 'English', 67),
(5, 'English', 78),
(6, 'English', 88),
(7, 'Science', 100),
(8, 'Science', 92),
(9, 'Science', 79);

显示数据

现在,让我们使用**SELECT**查询显示这9条记录。

SELECT * FROM Students;

执行此查询后,将显示所有9条记录及其3列,如下所示:

学生ID 科目 分数
1 数学 75
2 数学 82
3 数学 95
4 英语 67
5 英语 78
6 英语 88
7 科学 100
8 科学 92
9 科学 79

查找平均分数

现在,让我们找出9名学生的平均分数。这可以通过以下查询完成:

SELECT AVG(marks) as Average_Marks from Students;

以下是此查询的输出:

84

现在,让我们使用**WHERE**子句检索所有选修科学科目的学生的Student_Id和Marks。

SELECT Student_Id, Marks
FROM Students
WHERE subject in ('Science');

输出

学生ID 分数
7 100
8 92
9 79

使用子查询计算平均分数

子查询是在另一个查询中嵌套的查询。它用于执行中间计算,以进行简单的复杂计算,例如聚合、筛选等。以下是使用它的示例模板。

SELECT column1, column2, ...
FROM table1
WHERE column_name operator (SELECT column_name
FROM table2
WHERE condition);

这称为子查询,其中“SELECT column_name FROM table2 WHERE condition”嵌套在另一个查询中。让我们将上面从步骤2到5的所有步骤组合起来,编写我们的最终查询。

SELECT student_id, subject, marks
FROM student
WHERE marks > (SELECT AVG(marks) FROM student);

输出

学生ID 科目 分数
3 数学 95
6 英语 88
7 科学 100
8 科学 92

让我们分解此查询:

  • 子查询计算Students表中所有学生的平均分数。
    (SELECT AVG(marks) FROM students)
    
  • 此查询在系统内部将以这种方式查找:
    SELECT Student_Id, Subject, Marks
    FROM Students
    WHERE marks > 84;
    
  • 现在,“WHERE”子句过滤行,仅包含分数高于平均分数(在本例中为84)的学生。最后,它将显示所有分数高于84的学生的姓名,如上所示。

感谢您阅读本教程!我们希望您现在对在SQL任务中应用WHERE子句和子查询感到兴奋和自信。您已准备好开始在日常的专业和个人项目中使用这些强大的工具。祝您查询愉快,并享受发现数据可以揭示的见解!

更新于:2024年8月18日

484次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告