zzzqy 发表于 2023-6-27 19:43:48

mysql查询

列出平均成绩最高的学生名字和成绩。(SELECT 句中不得使用 TOP n 子句)

数据表相关代码:
CREATE TABLE Students(
    sno CHAR(10) NOT NULL PRIMARY KEY,
    sname VARCHAR(20),
    sex CHAR(2),
    bdate DATE,
    height DECIMAL(5, 2),
    department VARCHAR(20)
);

CREATE TABLE Courses(
    cno CHAR(10) NOT NULL PRIMARY KEY,
    cname VARCHAR(20),
    lhour INT,
    credit DECIMAL(2, 1),
    semester VARCHAR(10)
);

CREATE TABLE SC(
    sno CHAR(10) NOT NULL,
    cno CHAR(10) NOT NULL,
    grade DECIMAL(4, 1),
    PRIMARY KEY(sno, cno),
    CONSTRAINT fk_sno FOREIGN KEY (sno) REFERENCES Students(sno) ON DELETE CASCADE,
    CONSTRAINT fk_cno FOREIGN KEY (cno) REFERENCES Courses(cno) ON DELETE CASCADE
);
INSERT INTO Students VALUES('0102101','张三','男','1988-01-01',1.70,'计算机系');
INSERT INTO Students VALUES('0102105','李四','男','1985-04-01',1.86,'计算机系');
INSERT INTO Students VALUES('0401110','王五','女','1986-02-02',1.65,'电机系');
INSERT INTO Students VALUES('0401111','赵六','男','1987-04-02',1.60,'电机系');
INSERT INTO Courses VALUES('CS-220','编译原理',30,4,'秋季');
INSERT INTO Courses VALUES('CS-221','体系结构',40,2,'秋季');
INSERT INTO Courses VALUES('CS-222','数据库',60,4,'秋季');
INSERT INTO Courses VALUES('EE-110','电子技术',30,4,'秋季');
INSERT INTO Courses VALUES('EE-111','数字逻辑',30,3,'秋季');
INSERT INTO Courses VALUES('EE-112','数字电路',30,4,'秋季');
INSERT INTO SC VALUES('0102101','CS-220',89);
INSERT INTO SC VALUES('0102101','CS-221',90);
INSERT INTO SC VALUES('0102101','CS-222',97);
INSERT INTO SC VALUES('0102105','CS-220',66);
INSERT INTO SC VALUES('0102105','CS-221',70);
INSERT INTO SC VALUES('0102105','CS-222',60);
INSERT INTO SC VALUES('0401110','EE-110',NULL);
INSERT INTO SC VALUES('0401110','EE-111',80);
INSERT INTO SC VALUES('0401110','EE-112',90);
INSERT INTO SC VALUES('0401111','EE-110',90);
INSERT INTO SC VALUES('0401111','EE-111',89);
INSERT INTO SC VALUES('0401111','EE-112',90);

歌者文明清理员 发表于 2023-6-27 19:47:06

本帖最后由 歌者文明清理员 于 2023-6-27 19:48 编辑

您可以使用以下SQL查询语句来列出平均成绩最高的学生名字和成绩:

sql
Copy Code
SELECT Students.sname, AVG(SC.grade) AS avg_grade
FROM Students
INNER JOIN SC ON Students.sno = SC.sno
GROUP BY Students.sname
ORDER BY avg_grade DESC
LIMIT 1;
这个查询语句将计算每个学生的平均成绩,然后按平均成绩降序排序。最后,通过限制结果集的大小为1,您将获得平均成绩最高的学生的姓名和成绩。

执行以上查询后,您将看到输出结果类似于:

Copy Code
+-------+-----------+
| sname | avg_grade |
+-------+-----------+
| 张三|   92.0000 |
+-------+-----------+
在这个例子中,张三的平均成绩最高,为92.0000。

请注意,如果有多个学生具有相同的最高平均成绩,上述查询只会返回一个学生。如果您需要列出所有平均成绩最高的学生,可以将 LIMIT 1 去除。

希望能对您有所帮助!如有任何问题,请随时提问。
页: [1]
查看完整版本: mysql查询