先上表结构及SQL语句:
建表脚本(不规范的以汉字建吧,顾名思义):
DROP TABLE IF EXISTS score
;
CREATE TABLE score
(
学号
varchar(100) NOT NULL,
课程号
varchar(100) NOT NULL,
成绩
varchar(100) DEFAULT NULL,
PRIMARY KEY (学号
,课程号
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into score
(学号
,课程号
,成绩
) values (‘0001’,‘001’,‘30’),(‘0001’,‘002’,‘88’),(‘0001’,‘003’,‘45’),(‘0002’,‘001’,‘57’),(‘0002’,‘003’,‘33’),(‘0003’,‘002’,‘88’),(‘0003’,‘003’,‘45’),(‘0004’,‘001’,‘40’),(‘0004’,‘003’,‘78’),(‘0004’,‘004’,‘66’);
主要问题来了:我搜索了百度很多类似SQL。其实也有写对的,但是评论没人回复,然而评论总是那么相似,好多人说数据重复了,就不对了,怎么出来大于2条或者3条、4条等等。其实问题就出在这,你品,你细品。《查询各科成绩前两名的记录》,人家让查前两名的成绩,比如:课程号-003,成绩由高至低倒序排名有一个90分,三个85分,那么最终记录应该是四条才对,因为三个85分并列第二名,那就他们就都属于前两名。
结果误区:并不是一个90,一个85.这其实属于前两条,而不是前两名。如果真的取一个90,一个85,那么三个85分你到底取张三的85、李四的85、还是王五的85成绩?好,你随机取一个,其他两个人要跟你干架了,问你:“凭什么不是他们”?生活中这种场景几乎没有,换句话说,这种场景不合理。
PS:你非要犟,你就说取前两条一个90,一个85。hh~ Sorry,目前我也不会,如果会,请留言,谢谢~~