CREATE TABLE `score` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`class` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT ,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT ,
`score` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (1, 一班, 小赵, 85);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (2, 一班, 小钱, 70);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (3, 二班, 小孙, 60);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (4, 三班, 小李, 60);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (5, 二班, 小周, 55);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (6, 三班, 小吴, 80);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (7, 一班, 小郑, 60);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (8, 一班, 小王, 80);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (9, 一班, 小冯, 60);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (10, 一班, 小程, 90);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (11, 二班, 小楚, 80);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (12, 三班, 小魏, 85);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (13, 二班, 小蒋, 85);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (14, 三班, 小沈, 95);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (15, 一班, 小韩, 60);
INSERT INTO `score` (`id`, `class`, `name`, `score`) VALUES (16, 一班, 小杨, 100);
// 每个班级第一名的数据 【LIMIT 10000 的 10000 需要设置一个远远大于该表总条数的数字】
select * from (SELECT * from score WHERE score > 60 ORDER BY score desc LIMIT 10000) as c GROUP BY class;
// 每个班级前N名的数据 【小于2就是前2名 小于3就是前3名】 【ORDER BY 是按照某个字段某位值自定义排序 SUBSTRING(字段 从第几位开始 截取长度)】
SELECT
*
FROM
score t
WHERE
( SELECT count( 1 ) FROM score WHERE class = t.class AND score > t.score ) < 2
ORDER BY
FIELD( SUBSTRING( class, 1, 1 ), 一, 二, 三, 四, 五, 六, 七, 八, 九 );