實現(xiàn)對學(xué)生按課程依成績高低進行排序
建表:
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;
數(shù)據(jù):
1 張三 語文 80
2 李四 語文 90
3 王五 語文 93
4 張三 數(shù)學(xué) 77
5 李四 數(shù)學(xué) 68
6 王五 數(shù)學(xué) 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
查詢結(jié)果:
7 張三 英語 90 1
1 張三 語文 80 2
4 張三 數(shù)學(xué) 77 3
2 李四 語文 90 1
5 李四 數(shù)學(xué) 68 2
8 李四 英語 50 3
6 王五 數(shù)學(xué) 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
查詢結(jié)果:
7 張三 英語 90 1
1 張三 語文 80 2
4 張三 數(shù)學(xué) 77 3
2 李四 語文 90 1
5 李四 數(shù)學(xué) 68 2
8 李四 英語 50 3
6 王五 數(shù)學(xué) 99 1
3 王五 語文 93 2
9 王五 英語 89 3