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