实现对学生按课程依成绩高低进行排序
建表:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`course` varchar(20) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
数据:
1 张三 语文 80
2 李四 语文 90
3 王五 语文 93
4 张三 数学 77
5 李四 数学 68
6 王五 数学 99
7 张三 英语 90
8 李四 英语 50
9 王五 英语 89
子查询
SELECT
*, (
SELECT
COUNT(b.score) + 1
FROM
test b
WHERE
a. NAME = b. NAME
AND a.score < b.score
) AS 'rank'
FROM
test a
ORDER BY
NAME,
rank
查询结果:
7 张三 英语 90 1
1 张三 语文 80 2
4 张三 数学 77 3
2 李四 语文 90 1
5 李四 数学 68 2
8 李四 英语 50 3
6 王五 数学 99 1
3 王五 语文 93 2
9 王五 英语 89 3
自连接
SELECT
a.*, COUNT(b.score)+1 AS 'rank'
FROM
test a LEFT JOIN test b ON (a.name = b.name AND a.score < b.score)
GROUP BY
a.name, a.score,a.course
ORDER BY
a.name, COUNT(b.score) asc
查询结果:
7 张三 英语 90 1
1 张三 语文 80 2
4 张三 数学 77 3
2 李四 语文 90 1
5 李四 数学 68 2
8 李四 英语 50 3
6 王五 数学 99 1
3 王五 语文 93 2
9 王五 英语 89 3
网友评论