Tsql 如何为十个最常用的标签(在SEDE中)查询十个投票最多的问题?

Tsql 如何为十个最常用的标签(在SEDE中)查询十个投票最多的问题?,tsql,sql-server-2017,dataexplorer,Tsql,Sql Server 2017,Dataexplorer,在SEDE中,我试图针对十个最常用的标记(即JavaScript、HTML等)获取十个最上浮的问题 我了解了如何获取最常用的标签: select Id, TagName, Count from Tags t order by count desc 现在,对于每个标签,我想获得前十名的投票问题。我想我需要某种形式的加入。问题是在Posts表中,标记是一个数组。请参阅。使用PostTags表将标记链接到问题 然后,您可以使用ROW_NUMBER对每个标签的前10个问题进行排名 这里有一个方法: W

在SEDE中,我试图针对十个最常用的标记(即JavaScript、HTML等)获取十个最上浮的问题

我了解了如何获取最常用的标签:

select Id, TagName, Count
from Tags t
order by count desc
现在,对于每个标签,我想获得前十名的投票问题。我想我需要某种形式的加入。问题是在Posts表中,标记是一个数组。

请参阅。使用PostTags表将标记链接到问题

然后,您可以使用ROW_NUMBER对每个标签的前10个问题进行排名

这里有一个方法:

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