最近因为工作需要遇到此类问题,现简化思路,写一个简单的SQL实例。
mysql中没有row number() over() 函数,对与求每科的前3名这类问题稍微复杂。
希望对您能有所帮助。
建表:
DROP TABLE IF EXISTS score;
CREATE TABLE score (
id int(10) NOT NULL AUTO_INCREMENT,
subject_id int(10) UNSIGNED DEFAULT NULL DEFAULT 0,
student_id int(10) UNSIGNED DEFAULT NULL DEFAULT 0,
score float DEFAULT NULL DEFAULT -1,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id int(10) NOT NULL AUTO_INCREMENT,
name varchar(10) DEFAULT NULL DEFAULT 0,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS subject;
CREATE TABLE subject (
id int(10) NOT NULL AUTO_INCREMENT,
name varchar(10) DEFAULT NULL DEFAULT 0,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREME

本文通过创建和填充三个表(score、student、subject),演示如何在MySQL中解决查询每门课程前3名学生得分的问题。利用子查询计数方法筛选得分排名在前3的学生记录,提供了一个具体的SQL实例。
最低0.47元/天 解锁文章
6995

被折叠的 条评论
为什么被折叠?



