3

我在Stack Exchange Data Explorer中使用此查询:

select id, reputation
from users
where reputation >300000

我应该在这个查询中添加什么以便有一个带有用户“最佳”标签的附加列?

这是用户得分最高和/或用户拥有最多帖子(问题、答案)的标签。
例如,在我的用户页面中,在顶部标签中,我可以看到

4

1 回答 1

4

这是使用Common Table Expressions (CTE)Correlated Subqueries的一种方法。

在 SEDE 中查看:data.stackexchange.com/stackoverflow/query/815284/...

WITH tagAndUserStats AS (
    SELECT
                t.tagname,
                p.owneruserid       AS userid,
                SUM (p.score)       AS tagScore,
                COUNT (p.id)        AS postCount
    FROM        posts       p
    INNER JOIN  posttags    pt      ON pt.postid = COALESCE (p.parentid, p.id)
    INNER JOIN  tags        t       ON pt.tagid = t.id
    WHERE       p.owneruserid >= 1
    AND         p.posttypeid IN (1, 2)
    GROUP BY    t.tagname,
                p.owneruserid
)
SELECT
            u.id as [User Link],
            u.Reputation,
            (   SELECT TOP 1    tu.tagname
                FROM            tagAndUserStats tu
                WHERE           tu.userid = u.id
                ORDER BY        tu.tagScore DESC
            ) AS [Top Tag by Score],
            (   SELECT TOP 1    tu.tagname
                FROM            tagAndUserStats tu
                WHERE           tu.userid = u.id
                ORDER BY        tu.postCount DESC
            ) AS [Top Tag by Posts]
FROM        users u
WHERE       u.reputation > 300000
ORDER BY    u.reputation DESC


返回结果如下:

User Link Reputation Top Tag by Score Top Tag by Posts
乔恩斯基特 1010838 c# c#
BalusC 784437 java jsf
达林·迪米特洛夫 783553 c# c#
VonC 753855 混帐

笔记:

  1. 参考SEDE 架构
  2. 因为您指定了问题和答案,并且没有排除社区 wiki帖子,所以此查询的结果有时会与习惯值不同。
    对于徽章和诸如此类的东西,问题帖子和问题分数不算数,只有答案才算数。
于 2018-03-07T00:27:26.343 回答