Как задать SQL десять самых популярных вопросов для десяти наиболее часто используемых тегов (в SEDE)? - PullRequest
0 голосов
/ 23 марта 2019

В Stack Exchange Data Explorer (SEDE) я пытаюсь получить десять самых популярных вопросов по десяти наиболее часто используемым тегам (т. Е. JavaScript, HTML, ...).

Я вижу, как получить наиболее часто используемые теги:

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

Теперь для каждого тега я бы хотел получить десятку лучших вопросов. Мне нужно какое-то присоединение, я думаю. Проблема в том, что в таблице Posts, Tags - это массив.

1 Ответ

0 голосов
/ 24 марта 2019

См. схему 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
...