В настоящее время я работаю над запросом SQL для SEDE , который выбирает все сообщения пользователя из Переполнения стека и отображает, сколько репутации генерирует каждое сообщение.
Что я не могу обернуть вокруг себя, так это как подсчитать все положительных голосов , понижающих голосов и принимает для каждого сообщения, а затем вычислять общее репутация каждого поста.
Так что я бы сгруппировал по 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
не может быть разрешен:
Текущий выполняемый, но неполный запрос можно найти здесь (для его запуска необходимо ввести идентификатор пользователя )