我目前正在研究SEDE的 SQL 查询,该查询从 Stack Overflow 中选择用户的所有帖子,并显示每个帖子产生的声誉。
我无法理解的是如何计算每个帖子的所有赞成、反对和接受,然后计算每个帖子的整体声誉增益。
所以我会按Post id
显示分组Total score
并显示总体获得了多少声誉。
每次投票产生的声誉可以在这里看到:
+-----------+----------+--------+
| Post type | Question | Answer |
+-----------+----------+--------+
| Upvote | 5 | 10 |
+-----------+----------+--------+
| Downvote | 2 | 2 |
+-----------+----------+--------+
| Accept | 5 | 15 |
+-----------+----------+--------+
我的目标数据库架构可以在这里找到。
到目前为止,我的查询如下所示:
select
p.Id as 'Post id',
pt.Name as 'Post type',
p.Score as 'Total score',
(
case vt.Id
when 1 then 'Accept'
when 2 then 'Upvote'
else 'Downvote'
end
) as 'Reputation type'
from
Posts p
join
Votes v
on
v.PostId = p.Id
join
VoteTypes vt
on
vt.Id = v.VoteTypeId
join
PostTypes pt
on
pt.Id = p.PostTypeId
where
p.OwnerUserId = ##UserId##
and
vt.Id in (1, 2, 3)
order by
p.Score,
vt.Id
asc
它产生的输出看起来像这样:
我试图分组Vote type id
:
group by
vt.id
这样我至少可以通过使用以下内容来找出每个帖子累积了多少不同的选票:
select
....
count(vt.id)
但后来我得到一个错误,该Posts.Id
列无法解析:
当前可运行但不完整的查询可以在这里找到(您必须输入您的用户 ID才能运行)