【问题标题】:How to get user counts for both posts and comments, by certain tags?如何通过某些标签获取帖子和评论的用户数?
【发布时间】:2018-10-05 14:25:12
【问题描述】:

使用此数据浏览器查询:

select b.DisplayName as owner, a.N from
(select OwnerUserId, count(*) as N from Posts where (Tags like '%perl6%' or Tags like '%rakudo%' or (Tags like '%parrot%' and Tags like '%perl%')) group by OwnerUserId) as a,
(select Id, DisplayName from Users) as b
where a.OwneruserId = b.Id order by N desc;

我可以列出所有发布带有特定标签的问题的用户。
但是,我还想列出在带有该标签的帖子中回答或评论过的用户。

我猜它涉及使用Comment 表,但是我不清楚如何合并两个表中的 UserId。

【问题讨论】:

    标签: sql-server dataexplorer


    【解决方案1】:

    参考the SEDE schema:

    1. 按标签获取问题。
    2. Tags 表使用测试比在标签列上使用LIKE 操作更好。前者可以快 20 倍。
    3. 使用第 1 步中的问题列表获取答案。
    4. 同时使用问题列表和答案列表来获取 cmets。
    5. 请注意,SEDE provides wonderful magic columns[User Link] 一样。

    总而言之,这是一种方法:

    WITH questsByTags AS (
        SELECT DISTINCT
                    q.Id
                    , q.OwnerUserId
        FROM        Posts q
        INNER JOIN  PostTags pt     ON q.Id = pt.PostId
        INNER JOIN  Tags t          ON t.Id = pt.TagId
        WHERE       q.PostTypeId    = 1  -- questions
        AND (
                t.TagName   = 'perl6'
            OR  t.TagName   = 'rakudo'
            OR (
                t.TagName   = 'parrot'
                AND EXISTS (
                    SELECT      * FROM PostTags pt2
                    INNER JOIN  Tags t2      ON  t2.Id = pt2.TagId
                    WHERE q.Id = pt2.PostId  AND t2.TagName = 'perl'
        )   )   )
    ),
    answersByTags AS (
        SELECT      a.Id
                    , a.OwnerUserId
        FROM        Posts a
        INNER JOIN  questsByTags qbt  ON qbt.Id = a.ParentId
    ),
    commntsByTags AS (
        SELECT      c.Id
                    , c.UserId  AS [OwnerUserId]
        FROM        Comments c
        INNER JOIN (
            SELECT              Id FROM questsByTags
            UNION ALL SELECT    Id FROM answersByTags
        ) AS allPosts
        ON allPosts.Id = c.PostId
    ),
    allUsers AS (
        SELECT          OwnerUserId FROM questsByTags
        UNION SELECT    OwnerUserId FROM answersByTags
        UNION SELECT    OwnerUserId FROM commntsByTags
    )
    SELECT      au.OwnerUserId      AS [User Link]
                , (SELECT Count (qbt.Id) FROM questsByTags  qbt WHERE qbt.OwnerUserId = au.OwnerUserId)  AS [Num Qsts]
                , (SELECT Count (abt.Id) FROM answersByTags abt WHERE abt.OwnerUserId = au.OwnerUserId)  AS [Num Ans]
                , (SELECT Count (cbt.Id) FROM commntsByTags cbt WHERE cbt.OwnerUserId = au.OwnerUserId)  AS [Num Cmmnts]
    FROM        allUsers au
    WHERE       au.OwnerUserId IS NOT NULL
    ORDER BY    [Num Qsts] DESC, [Num Ans] DESC, [Num Cmmnts] DESC
    

    您可以this SEDE link.this SEDE link.观看现场直播

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2019-09-01
      • 2011-11-03
      相关资源
      最近更新 更多