MySQL实现分组内排序
选课表:学号,课程号,开课学期,成绩
需求说明:由于可能挂科,所以可能会出现同一学生在一门课程上出现多次成绩,要求显示该生同意科目的最高成绩。
建表:
create table course(
sno int,
cno int,
year int,
score int);
插入数据;
INSERT INTO course VALUES(1,1,2,56);
INSERT INTO course VALUES(1,1,2,65);
INSERT INTO course VALUES(2,3,2,58);
INSERT INTO course VALUES(2,3,2,77);
INSERT INTO course VALUES(3,2,2,88);
INSERT INTO course VALUES(4,2,2,77);
实现:查出最高成绩作为临时表,外连接得到最高成绩对应的记录内容。
SELECT course.* FROM (SELECT sno,cno,MAX(score) as newscore FROM course GROUP BY sno,cno) AS a
LEFT OUTER JOIN course
ON a.sno = course.sno and a.cno = course.cno and a.newscore=course.score;
MySQL实现组内排序(group_concat函数):
group_concat函数说明:将分组内某一列的值连接到一起,在一行进行显示。
SELECT sno,cno,GROUP_CONCAT(score ORDER BY score DESC) FROM course GROUP BY sno,cno;