sql分组后取每组前三

Posted zeran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql分组后取每组前三相关的知识,希望对你有一定的参考价值。

对数据进行分组,取每组前三条数据

INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'1\', \'张三\', \'50\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'2\', \'张三\', \'60\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'3\', \'张三\', \'70\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'4\', \'张三\', \'66\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'5\', \'张三\', \'55\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'6\', \'张三\', \'77\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'7\', \'李四\', \'32\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'8\', \'李四\', \'45\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'9\', \'李四\', \'33\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'10\', \'李四\', \'28\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'11\', \'李四\', \'60\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'12\', \'李四\', \'55\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'13\', \'王五\', \'99\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'14\', \'王五\', \'107\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'15\', \'王五\', \'88\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'16\', \'王五\', \'65\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'17\', \'王五\', \'72\');
INSERT INTO `sakila`.`tt` (`id`, `name`, `score`) VALUES (\'18\', \'王五\', \'126\');
inster

数据如下

 

 题目:分组取每人最好成绩的前三条

select * from tt as t1 where (select count(*) from tt where name=t1.name and score>=t1.score)<=3 ORDER BY score desc 

题目:取每人最好成绩,按最好成绩排名;取每人最平均成绩,按照平均成绩倒叙排名

以上是关于sql分组后取每组前三的主要内容,如果未能解决你的问题,请参考以下文章

mysql分组后,取每组的前3条数据(并且有顺序)

Mysql 分组以后取每组的前三名数据

sql数据库怎么实现分组并取每组的前1条语句,按日期排序?

Hive分组取TOPN数据

sql 怎么先分组再查询每组中前三天数据?

sql 分组后求每组中的最大值对应的那条数据