在Stack Exchange 数据资源管理器(SEDE) 中,我试图为十个最常用的标签(即 JavaScript、HTML、...)获取最受好评的十个问题。
我看到如何获得最常用的标签:
select Id, TagName, Count
from Tags t
order by count desc
现在,对于每个标签,我想获得投票最多的前十个问题。我想我需要某种加入。问题是在Posts
表中,Tags
是一个数组。
在Stack Exchange 数据资源管理器(SEDE) 中,我试图为十个最常用的标签(即 JavaScript、HTML、...)获取最受好评的十个问题。
我看到如何获得最常用的标签:
select Id, TagName, Count
from Tags t
order by count desc
现在,对于每个标签,我想获得投票最多的前十个问题。我想我需要某种加入。问题是在Posts
表中,Tags
是一个数组。
请参阅SEDE 架构。使用PostTags
表格将标签链接到问题。
然后,您可以使用ROW_NUMBER()
对每个标签的前 10 个问题进行排名。
这是一种方法(在 SEDE 中查看):
WITH topTags AS (
SELECT TOP 10
t.Id,
t.TagName,
t.Count,
tagRank = ROW_NUMBER() OVER (ORDER BY t.Count DESC)
FROM Tags t
ORDER BY t.Count DESC
)
SELECT
qbt.TagName AS [Tag],
--qbt.tagRank AS [Tag Rank],
qbt.Count AS [Q's for Tag],
qbt.Score AS [Qst Score],
qbt.Id AS [Post Link],
qbt.qstRow AS [Rank in tag]
FROM (
SELECT
tt.TagName,
--tt.tagRank,
tt.Count,
q.Score,
q.Id,
qstRow = ROW_NUMBER() OVER (PARTITION BY tt.Id ORDER BY tt.Id, q.Score DESC)
FROM topTags tt
LEFT JOIN PostTags pt ON pt.TagId = tt.Id
LEFT JOIN Posts q ON q.ID = pt.PostId
) qbt
WHERE qbt.qstRow <= 10
ORDER BY qbt.Count DESC,
qbt.Score DESC