查找所有成绩高于平均成绩的学生的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子句和子查询感到兴奋和自信。您已准备好开始在日常的专业和个人项目中使用这些强大的工具。祝您查询愉快,并享受发现数据可以揭示的见解!
广告