1、准备测试数据
create table tb(name varchar(10),val int,memo varchar(20));
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5');
按照 name分组,取出每组前两名(这个可以自定义)写法为:
SELECT
tba.name,
tba.val
FROM tb tba
WHERE 2 > ( SELECT count(*) FROM tb tbb WHERE tbb.name = tba.name AND tbb.val > tba.val )
ORDER BY
tba.name,
tba.val DESC
结果为: