如何在 SQL 中找到每个学生的平均分?
在 SQL 中,有时我们需要根据表的另一列求一列的平均值,例如求他/她在所有科目中的学生平均分。这涉及使用GROUP BY子句以及AVG等AGGREGATE函数。下面的文章中描述了相同的内容。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库。
第 1 步:创建数据库。为此,请使用以下命令创建一个名为 GeeksForGeeks 的数据库。
询问:
CREATE DATABASE GeeksForGeeks
输出:
第 2 步:使用 GeeksForGeeks 数据库。为此,请使用以下命令。
询问:
USE GeeksForGeeks
输出:
第 3 步:在 GeeksForGeeks 数据库中创建一个 STDMARKS 表。该表有 4 列,即 ROLL_NO、STUDENT_NAME、SUBJECT 和 MARKS,其中包含学生的卷号和姓名以及学生在相应科目中的科目名称和分数。
询问:
CREATE TABLE STDMARKS(
ROLL_NO INT,
STUDENT_NAME VARCHAR(10),
SUBJECT VARCHAR(10),
MARKS INT);
输出:
第 4 步:描述表 STDMARKS 的结构。
询问:
EXEC SP_COLUMNS STDMARKS;
输出:
第 5 步:在 STDMARKS 表中插入 16 行。
询问:
INSERT INTO STDMARKS VALUES(1,'RAVI','C++',75);
INSERT INTO STDMARKS VALUES(1,'RAVI','ORACLE',84);
INSERT INTO STDMARKS VALUES(1,'RAVI','JAVA',95);
INSERT INTO STDMARKS VALUES(1,'RAVI','OS',62);
INSERT INTO STDMARKS VALUES(2,'VIVEK','C++',46);
INSERT INTO STDMARKS VALUES(2,'VIVEK','ORACLE',70);
INSERT INTO STDMARKS VALUES(2,'VIVEK','JAVA',55);
INSERT INTO STDMARKS VALUES(2,'VIVEK','OS',56);
INSERT INTO STDMARKS VALUES(3,'RAJ','C++',82);
INSERT INTO STDMARKS VALUES(3,'RAJ','ORACLE',84);
INSERT INTO STDMARKS VALUES(3,'RAJ','JAVA',74);
INSERT INTO STDMARKS VALUES(3,'RAJ','OS',92);
INSERT INTO STDMARKS VALUES(4,'MAHESH','C++',43);
INSERT INTO STDMARKS VALUES(4,'MAHESH','ORACLE',49);
INSERT INTO STDMARKS VALUES(4,'MAHESH','JAVA',68);
INSERT INTO STDMARKS VALUES(4,'MAHESH','OS',35);
输出:
第 6 步:显示 STDMARKS 表的所有行。
询问:
SELECT * FROM STDMARKS;
输出:
第 7 步:显示学生的ROLL_NO和该学生在STDMARKS表中所有科目的平均分数。为了实现一列根据另一列的聚合值,我们需要使用GROUP BY子句以及聚合函数,例如AVG 。 GROUP BY子句后提到的列是我们输出的基础。以这种方式获得学生平均分。
句法:
SELECT COLUMN_NAME1,AVG(COLUMN_NAME2)
AS ALIAS FROM TABLE_NAME GROUP BY COLUMN_NAME1;
询问:
SELECT ROLL_NO,AVG(MARKS) AS "AVERAGE MARKS"
FROM STDMARKS GROUP BY ROLL_NO;
输出: