如何为data.stackexchange组合一个SQL查询,该查询将显示给定位置中标记的最活跃用户(就给定的答案而言)?
EG。类似于此处列出的前30名https://stackoverflow.com/tags/ruby-on-rails-3/topusers,但具体位置。
过去30天在柏林等地担任顶级Ruby Answerers
谢谢!
答案 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天内总体上回答了较旧的问题,则可能会有更多的答案,而且,由于许多用户根本没有指定位置,因此该位置是一个非常不可靠的领域。它可能尽可能接近它。
数据资源管理器并不难以使用 - 稍微尝试一下,您就会意识到表格的连接方式。这是一个很好的练习:)