sql服务器:遍历子查询并限制主查询的结果对应于子查询中的每一行
sql server: looping through a subquery and limting result in main query corresponding to evry row in subquery
我正在研究 Whosebug sql查询门户。我希望拥有最大 post 计数的前 1000 个标签。并且每个标签都需要 id 为 60 post 的标签作为他们的标签。所以我需要遍历所有 100 个标签,并获得与它们链接的前 60 个 postid。请有人帮忙
她是我的 sql 声明。
SELECT Top 60 PostId,ok.Id
FROM PostTags as test
INNER JOIN (SELECT TOP 50
Id,Count
FROM Tags
ORDER BY Tags.Count DESC) as ok
ON ok.Id = test.TagId
但它 returns 只有 60 post 秒,但我需要每个顶部标签 60 个。请告诉我如何遍历子查询。
这样试:查询将从每种类型的 sys.objects 中提取三个对象
Post这对一个空查询window,适应你的需要...
WITH TypesToGroup AS
(
SELECT DISTINCT type_desc FROM sys.objects
)
select *
from TypesToGroup
cross apply
(
select top 3 x.*
from sys.objects as x
where x.type_desc=TypesToGroup.type_desc
) AS ThreeOfEach
WITH CTEM AS
(
SELECT TOP 100 T.ID
FROM Tags T ORDER BY T.[COUNT] DESC
),
CTE as
(
SELECT P.POSTID,T.ID
,ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY P.POSTID DESC) AS RN
FROM PostTags P
INNER JOIN CTEM T ON P.TAGID = T.ID
)
SELECT * FROM CTE WHERE RN<=60
我正在研究 Whosebug sql查询门户。我希望拥有最大 post 计数的前 1000 个标签。并且每个标签都需要 id 为 60 post 的标签作为他们的标签。所以我需要遍历所有 100 个标签,并获得与它们链接的前 60 个 postid。请有人帮忙
她是我的 sql 声明。
SELECT Top 60 PostId,ok.Id
FROM PostTags as test
INNER JOIN (SELECT TOP 50
Id,Count
FROM Tags
ORDER BY Tags.Count DESC) as ok
ON ok.Id = test.TagId
但它 returns 只有 60 post 秒,但我需要每个顶部标签 60 个。请告诉我如何遍历子查询。
这样试:查询将从每种类型的 sys.objects 中提取三个对象
Post这对一个空查询window,适应你的需要...
WITH TypesToGroup AS
(
SELECT DISTINCT type_desc FROM sys.objects
)
select *
from TypesToGroup
cross apply
(
select top 3 x.*
from sys.objects as x
where x.type_desc=TypesToGroup.type_desc
) AS ThreeOfEach
WITH CTEM AS
(
SELECT TOP 100 T.ID
FROM Tags T ORDER BY T.[COUNT] DESC
),
CTE as
(
SELECT P.POSTID,T.ID
,ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY P.POSTID DESC) AS RN
FROM PostTags P
INNER JOIN CTEM T ON P.TAGID = T.ID
)
SELECT * FROM CTE WHERE RN<=60