如何取出分组数据的前几条记录

天涯独行 2011-01-07 11:57:08
一张用户表和一张产品表,产品表中有一个用户ID,现在想取出用户信息和他的其中五条产品的信息。
我的想法是在产品表中接用户ID分组但这样只能取到一条产品,请教各位高手...在线等待
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Nice 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dlut_liuq 的回复:]

SQL code
SELECT A.*,B.* FROM 用户表 A CROSS APPLY (SELECT TOP(5)* FROM 产品表 B WHERE A.ID=B.ID)B
[/Quote]

推荐此方法。 速度上会快些的。
-晴天 2011-01-07
  • 打赏
  • 举报
回复
create table 用户表(id int,uname nvarchar(10))
insert into 用户表 select 1,'张三' union all select 2,'李四'
create table 产品表(uid int,pname nvarchar(10),price int)
insert into 产品表 select 1,'AAAA',10
insert into 产品表 select 1,'BBBB',20
insert into 产品表 select 1,'CCCC',20
insert into 产品表 select 1,'DDDD',21
insert into 产品表 select 1,'EEEE',22
insert into 产品表 select 1,'adsf',25
insert into 产品表 select 1,'fwed',28
insert into 产品表 select 2,'FFFF',15
insert into 产品表 select 2,'ffwe',25
go
select uname,pname from (
select row_number() over(partition by a.id order by b.pname)as rm,a.uname,b.pname from 用户表 a inner join 产品表 b on a.id=b.uid
)t where rm<6
go
drop table 用户表,产品表
/*
uname pname
---------- ----------
张三 AAAA
张三 adsf
张三 BBBB
张三 CCCC
张三 DDDD
李四 FFFF
李四 ffwe

(7 行受影响)*/
飘零一叶 2011-01-07
  • 打赏
  • 举报
回复
SELECT A.*,B.* FROM 用户表 A CROSS APPLY (SELECT TOP(5)* FROM 产品表 B WHERE A.ID=B.ID)B
  • 打赏
  • 举报
回复


--users表中假设有下面字段:userid,username,age,address
with userproducts
as
(
select row_number() over (order by users.userid) as rowid ,users.username,users.userid,users.age,users.address,products.* from users join products products on users.userid=products.userid
)
select top 5 * from userproducts


或者把
select top 5 * from userproducts 改写成
select * from userproducts where rowid>=0 and rowid<=5 这样方便以后分页使用
haitao 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 orchidcat 的回复:]
引用 1 楼 dlut_liuq 的回复:

SQL code
SELECT A.*,B.* FROM 用户表 A CROSS APPLY (SELECT TOP(5)* FROM 产品表 B WHERE A.ID=B.ID)B

推荐此方法。 速度上会快些的。
[/Quote]

这种子查询里使用到上一层记录集字段,是不是相当于以上一层记录集的每一条记录都去执行一次子查询
这样的效率会高?

row_number() over的效率,不知道怎么与传统的查询进行比较
从实现角度推测,应该是很高效的:依据索引遍历记录,增加一个序号列

11,847

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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