最近因为工作需要遇到此类问题,现简化思路,写一个简单的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