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
结果为:

本文介绍如何使用SQL根据name字段进行分组,并选取每组中排名前两名的数据,通过子查询实现。示例涉及数据插入和复杂查询的编写,适用于数据库操作和SQL进阶学习。

3349

被折叠的 条评论
为什么被折叠?



