请求编写查询语句计算StackOverflow用户近一年问答所得声誉
Stack Overflow用户近365天获取的声誉查询语句
下面的查询语句可以统计用户在近365天内,通过提问和回答获得的累计声誉,同时展示用户注册时长,方便区分1年/10年经验的用户:
SELECT u.Id AS UserId, u.DisplayName, DATEDIFF(year, u.CreationDate, GETDATE()) AS AccountAgeYears, -- 统计近365天内新发布内容的基础声誉 SUM(CASE WHEN p.PostTypeId = 1 THEN p.Score * 5 -- 提问每赞+5 WHEN p.PostTypeId = 2 THEN p.Score * 10 -- 回答每赞+10 ELSE 0 END) + -- 统计近365天内投票带来的声誉变化 SUM(CASE WHEN v.VoteTypeId = 2 AND p.PostTypeId = 1 THEN 5 -- 提问新增赞+5 WHEN v.VoteTypeId = 2 AND p.PostTypeId = 2 THEN 10 -- 回答新增赞+10 WHEN v.VoteTypeId = 3 AND p.PostTypeId = 2 THEN -2 -- 回答被踩-2 ELSE 0 END) AS Last365DaysReputation FROM Users u LEFT JOIN Posts p ON u.Id = p.OwnerUserId LEFT JOIN Votes v ON p.Id = v.PostId WHERE -- 覆盖近365天内的新内容,以及旧内容在近期获得的投票 (p.CreationDate >= DATEADD(day, -365, GETDATE())) OR (v.CreationDate >= DATEADD(day, -365, GETDATE())) GROUP BY u.Id, u.DisplayName, u.CreationDate ORDER BY Last365DaysReputation DESC;
关键说明:
- 统计范围不仅包含近365天发布的提问/回答,还涵盖旧内容在近期获得的投票,更准确反映用户近期活跃度
- 声誉计算严格遵循Stack Overflow官方规则
- 通过
AccountAgeYears字段可快速筛选出1年或10年经验的用户做对比
内容的提问来源于stack exchange,提问作者nik0x1
相关产品推荐
相关产品推荐

