SQLlite 分组后取每个组的前10条

dengyi422 2017-11-17 05:31:15
我用SQL SERVER row number那个函数把每个分组前10条可以取出来

而SQLlite 没有row number,有没有什么方法一条SQL语句把每个分组的前10条
应该怎么写性能会比较高?
...全文
1256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-11-23
  • 打赏
  • 举报
回复
drop table if exists student;
create table student( id INT PRIMARY KEY,[name] NVARCHAR(20), classNo INT,gender char(1) );
insert into student(id,[name],classNo,gender) values(1,'小明a',1,'男');
insert into student(id,[name],classNo,gender) values(2,'小明b',1,'男');
insert into student(id,[name],classNo,gender) values(3,'小明c',1,'男');
insert into student(id,[name],classNo,gender) values(4,'小明d',1,'男');
insert into student(id,[name],classNo,gender) values(5,'小明e',1,'男');
insert into student(id,[name],classNo,gender) values(6,'小明f',1,'男');
insert into student(id,[name],classNo,gender) values(7,'小明g',1,'男');
insert into student(id,[name],classNo,gender) values(8,'小明h',1,'男');
insert into student(id,[name],classNo,gender) values(9,'小明i',1,'男');
insert into student(id,[name],classNo,gender) values(10,'小明j',1,'男');
insert into student(id,[name],classNo,gender) values(11,'小明k',1,'男');
insert into student(id,[name],classNo,gender) values(12,'小明k',2,'男');

insert into student(id,[name],classNo,gender) values(13,'小红1',1,'女');
insert into student(id,[name],classNo,gender) values(14,'小红2',1,'女');
insert into student(id,[name],classNo,gender) values(15,'小红3',1,'女');
insert into student(id,[name],classNo,gender) values(16,'小红4',1,'女');
insert into student(id,[name],classNo,gender) values(17,'小红5',1,'女');
insert into student(id,[name],classNo,gender) values(18,'小红6',1,'女');
insert into student(id,[name],classNo,gender) values(19,'小红7',1,'女');
insert into student(id,[name],classNo,gender) values(20,'小红8',1,'女');
insert into student(id,[name],classNo,gender) values(21,'小红9',1,'女');
insert into student(id,[name],classNo,gender) values(22,'小红10',1,'女');
insert into student(id,[name],classNo,gender) values(23,'小红11',1,'女');
insert into student(id,[name],classNo,gender) values(24,'小红12',2,'女');

select * from (
	select * from student where classNo=1 and gender='男' order by id limit 0,10
) as t1
union all
select * from (
	select * from student where classNo=1 and gender='女' order by id limit 0,10
) as t2 
order by gender desc,id
/*
id	name	classNo	gender
1	小明a	1	        男
2	小明b	1	        男
3	小明c	1	        男
4	小明d	1	        男
5	小明e	1	        男
6	小明f	1	        男
7	小明g	1	        男
8	小明h	1	        男
9	小明i	1	        男
10	小明j	1	        男
13	小红1	1	        女
14	小红2	1	        女
15	小红3	1	        女
16	小红4	1	        女
17	小红5	1	        女
18	小红6	1	        女
19	小红7	1	        女
20	小红8	1	        女
21	小红9	1	        女
22	小红10	1	        女
*/
卖水果的net 2017-11-18
  • 打赏
  • 举报
回复
给出表结构,和部分测试数据。
二月十六 2017-11-18
  • 打赏
  • 举报
回复
SELECT  *
FROM ClassStudent a
WHERE StuName IN ( SELECT TOP 10
StuName
FROM ClassStudent
WHERE a.ClassID = ClassID
ORDER BY StuName )
dengyi422 2017-11-17
  • 打赏
  • 举报
回复
就比如我的数据就是班级别, 有一个字段是性别,其他全用 * 就可以 一条数据语句取男生和女生前10条 一共取出20条就可以了
卖水果的net 2017-11-17
  • 打赏
  • 举报
回复
说一下你的数据长什么样,看看有没有规律。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧