针对特定位置的最近30天内回复[TAG]回答者

时间:2015-08-26 11:35:35

标签: sql stackexchange

如何为data.stackexchange组合一个SQL查询,该查询将显示给定位置中标记的最活跃用户(就给定的答案而言)?

EG。类似于此处列出的前30名https://stackoverflow.com/tags/ruby-on-rails-3/topusers,但具体位置。

过去30天在柏林等地担任顶级Ruby Answerers

谢谢!

1 个答案:

答案 0 :(得分:1)

因此,在查看数据库模式之后,这就是我提出的查询。

-- Top 10 Ruby Answerers in the last 30 days in Berlin based on score
select top 10
  u.displayname, 
  number_of_answers = count(*), 
  total_score = sum(p.score)
from
  users u                                 
join 
  posts p on p.owneruserid = u.id         -- joined to get answer posts
join 
  posts pp on p.parentid = pp.id          -- post parent is the question
join 
  posttags pt on pt.postid = pp.id        -- tags for post parent
join 
  tags t on t.id = pt.tagid               -- tags for tag name
where 
  t.tagname like '%ruby%'                 -- tags to filter for
 and                                      -- includes everything ruby inc. rails
  p.creationdate > (getdate()-30)         -- past 30 days
 and 
  u.location like '%Berlin%'              -- locations differ in format
group by 
  u.displayname
order by 
  3 desc;                                 -- order by total score for "best" answerers
                                          -- order by 2 (count) to get most active

我不是数据资源管理器架构的专家,因此查询可能不太正确并且有一些警告:日期过滤器适用于问题,而不是答案因此,如果用户在过去30天内总体上回答了较旧的问题,则可能会有更多的答案,而且,由于许多用户根本没有指定位置,因此该位置是一个非常不可靠的领域。它可能尽可能接近它。

数据资源管理器并不难以使用 - 稍微尝试一下,您就会意识到表格的连接方式。这是一个很好的练习:)

Here's the query