首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在所有标记中查找顶级用户的SEDE查询

在所有标记中查找顶级用户的SEDE查询
EN

Stack Overflow用户
提问于 2018-10-17 14:11:24
回答 1查看 144关注 0票数 0

目前,我在SEDE上创建了以下查询,通过组合答案和分数计数来查找每个标签中的顶级用户。它可以在这里找到:在所有标签中以分数和答案计数的最高用户。然而,目前它正在每个标签上带回多个顶级用户,这是可以理解的,因为我还没有对此设置一个限制。

以下是查询:

代码语言:javascript
复制
SELECT TOP 50
       t.TagName,
       a.OwnerUserId AS [User Link],
       SUM(a.Score) / 10 AS Score,
       COUNT(a.Score) AS [Count],
       ((SUM(a.Score) / 10) + COUNT(a.Score)) / 2 AS Total
FROM Posts a, 
     Posts q
     INNER JOIN PostTags qt ON q.Id = qt.PostId
     INNER JOIN Tags t ON t.Id = qt.TagId
WHERE a.ParentId = q.Id
      AND a.PostTypeId = 2
      AND a.CommunityOwnedDate IS NULL
      AND a.OwnerUserId IS NOT NULL
GROUP BY a.OwnerUserId, t.TagName
ORDER BY ((SUM(a.Score) / 10) + COUNT(a.Score)) / 2 DESC

如何才能使它只返回每个标签的顶级用户呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 15:14:52

我会将您的查询包装在一个CTE (公共表表达式)中,然后计算第二个CTE上每个标签的最大得分,最后将两个CTE连接起来,以获得每个标记的顶级用户。查询应该如下所示:

代码语言:javascript
复制
with user_tag as ( -- score per user, per tag
  SELECT t.TagName,
       a.OwnerUserId AS [User Link],
       SUM(a.Score) / 10 AS Score,
       COUNT(a.Score) AS [Count],
       ((SUM(a.Score) / 10) + COUNT(a.Score)) / 2 AS Total
  FROM Posts a
  JOIN Posts q on a.ParentId = q.Id
  JOIN PostTags qt ON q.Id = qt.PostId
  JOIN Tags t ON t.Id = qt.TagId
  WHERE a.PostTypeId = 2
    AND a.CommunityOwnedDate IS NULL
    AND a.OwnerUserId IS NOT NULL
  GROUP BY a.OwnerUserId, t.TagName
),
max_score as ( -- max score per tag
  select TagName, max(Total) as max_score
  from user_tag
  group by TagName
)
select 
    u.*
  from user_tag u
  join max_score m on m.TagName = u.TagName
                  and m.max_score = u.Total

我没有包括任何订单,因为我不知道你想要怎样的行。如果首先有多个用户以相同的分数捆绑在一起,请考虑此查询将显示同一标记的多行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52856969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档