查询各科成绩前3和第3的学⽣(SQL)
数据库⾯试题:
其他关联表这⾥不⼀⼀写出,仅写出关键表(score)成绩表
成绩记录id scoreid
学⽣id userid
课程id scoureid
成绩score
现需要求出各科成绩前三名的学⽣和成绩,与相应的课程。
多表查询sql语句面试题实现思路
⽤课程id⾃关联⼀次成绩表,如果相应课程成绩⾼则排名越⾼。
SELECT * FROM `score` a WHERE
(SELECT COUNT(*) FROM `score` b WHERE a.`sourceid`= b.`sourceid` AND b.`score`>a.`score`)<3 -- 即成绩前3
-- and (SELECT COUNT(*) FROM `score` b WHERE a.`sourceid`= b.`sourceid` AND b.`score`>a.`score`)>1-- 即成绩为第2名以后
ORDER BY sourceid,score DESC;
显⽰结果:
⼜需要的可以尝试⼀下,⽹上了很多解决办法,要么使⽤⾼级函数,要么逻辑很复杂,以下是建表语句
CREATE TABLE `score` (
`scoreid` int(11) NOT NULL AUTO_INCREMENT,
`sourceid` int(11) DEFAULT NULL,
`userid` int(11) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`scoreid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
相应数据SQL:
insert  into `score`(`scoreid`,`sourceid`,`userid`,`score`) values (1,1,1,60),(2,2,1,80),(3,3,1,95),(4,1,2,75),(5,2,2,85),(6,3,2,90),(7,4,1,89),(8,4,2,88),(9,1,3,78),(10,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。