实现对学生按课程依成绩高低进行排序
建表:1
2
3
4
5
6
7CREATE 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
2
3
4
5
6
7
8
91	张三	语文	80
2	李四	语文	90
3	王五	语文	93
4	张三	数学	77
5	李四	数学	68
6	王五	数学	99
7	张三	英语	90
8	李四	英语	50
9	王五	英语	89
##子查询1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26SELECT
	*, (
		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
#自连接1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19SELECT 
    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