查找所有成绩高于平均成绩的学生的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);

Learn SQL in-depth with real-world projects through our SQL certification course. Enroll and become a certified expert to boost your career.

显示数据

现在,让我们使用**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次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告