Изменение запроса для работы с несколькими пользователями с использованием SEDE

Мне трудно заставить мой запрос делать то, что я хочу...

Если я запускаю его для одного UserId: 2140173, он работает нормально.

Select UserId, 
(Select Count(VoteTypeId) From SuggestedEditVotes where UserId = 2140173) as 'Total',
(Select Count(VoteTypeId) From SuggestedEditVotes where UserId = 2140173 and VoteTypeId = 2) As 'Accepted',
(Select Count(VoteTypeId) From SuggestedEditVotes where UserId = 2140173 and VoteTypeId = 3) As 'Rejected'

from SuggestedEditVotes

    inner join Users on SuggestedEditVotes.UserId = Users.Id

where Users.Reputation > 2000 and UserId = 2140173

group by UserId

having Count(VoteTypeId) > 0

он возвращается

UserId    Total    Accepted    Rejected
2140173    2230        1145        1085

Но когда я пытаюсь немного изменить его и запустить для всех пользователей с репутацией более 2000, это не дает мне правильных результатов:/

Я застрял в операторах sub Select, так как не знаю, что добавить в их предложение where.

Это то, что я пробовал, но он возвращает итоги, и я хочу, чтобы он был подсчетом для каждого идентификатора пользователя.

Select UserId, 
(Select Count(VoteTypeId) From SuggestedEditVotes) as 'Total',
(Select Count(VoteTypeId) From SuggestedEditVotes where VoteTypeId = 2) As 'Accepted',
(Select Count(VoteTypeId) From SuggestedEditVotes where VoteTypeId = 3) As 'Rejected'

from SuggestedEditVotes

    inner join Users on SuggestedEditVotes.UserId = Users.Id

where Users.Reputation > 2000

group by UserId

having Count(VoteTypeId) > 0

Кто-нибудь может помочь?

ПРИМЕЧАНИЕ. https://data.stackexchange.com/stackoverflow/query/new


person Community    schedule 29.04.2014    source источник


Ответы (1)


Попробуй это:

SELECT UserId,
 COUNT(VoteTypeId) AS 'Total',
 COUNT(
 CASE
   WHEN VoteTypeId = 2
   THEN VoteTypeId
   ELSE NULL
 END) AS 'Accepted',
 COUNT(
 CASE
   WHEN VoteTypeId = 3
   THEN VoteTypeId
   ELSE NULL
 END) AS 'Rejected'
FROM SuggestedEditVotes
INNER JOIN Users
ON SuggestedEditVotes.UserId = Users.Id
WHERE Users.Reputation       > 2000
GROUP BY UserId
HAVING COUNT(VoteTypeId) > 0
person Olesya Razuvayevskaya    schedule 29.04.2014