-1

Stack Exchange 数据资源管理器(SEDE) 中,我试图为十个最常用的标签(即 JavaScript、HTML、...)获取最受好评的十个问题。

我看到如何获得最常用的标签:

select Id, TagName, Count
from Tags t
order by count desc

现在,对于每个标签,我想获得投票最多的前十个问题。我想我需要某种加入。问题是在Posts表中,Tags是一个数组。

4

1 回答 1

0

请参阅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
于 2019-03-24T05:30:42.257 回答