SQL - DataExplorer Query Top Unsung Users

Как ранее обсуждалось на мета:

Я хочу создать запрос в Проводнике данных, чтобы показать 100 самых неподражаемых пользователей в Stackru.

То, что я имею в виду под топ-100, это список, упорядоченный по наибольшему% от нуля принятых ответов в порядке убывания.

Я впервые пытаюсь работать с SQL, я изучал другие запросы и думал, что это будет так:

SELECT TOP 100
    u.Id as [User Link],
    count(a.Id) as [Answers],
(select sum(CASE WHEN a.Score = 0 then 1 else 0 end) * 1000 / count(a.Id) / 10.0) as [Percentage]
from
    Users u
    inner join
    Posts q on q.AcceptedAnswerId = u.Id
    inner join
    Posts a
    on a.Id = q.AcceptedAnswerId
where
      a.CommunityOwnedDate is null
      and a.postTypeId = 2
      and u.Reputation > 1000
group by u.Id
order by Percentage DESC

Результат: http://data.stackexchange.com/stackru/query/218910

Результат показывает, что у пользователей есть один ответ, который не соответствует действительности, когда вы проверяете их профили.

1 ответ

Решение

Вы можете получить эту информацию с помощью запроса Сэма Шафрона " Настоящий невоспетый герой". Я немного изменил его, чтобы включить только 100 лучших.

select top 100 
  X.*, u.Reputation from (
  select a.OwnerUserId [User Link], 
  sum(case when a.Score = 0 then 0 else 1 end) as [Non Zero Score Answers],  
  sum(case when a.Score = 0 then 1 else 0 end) as [Zero Score Answers]
from Posts q
join Posts a on a.Id = q.AcceptedAnswerId 
where a.CommunityOwnedDate is null and a.OwnerUserId is not null
 and a.OwnerUserId <> isnull(q.OwnerUserId,-1)
group by a.OwnerUserId
having sum(case when a.Score = 0 then 1 else 0 end) > 10
) as X 
join Users u on u.Id = [User Link]
order by --[Zero Score Answers] desc, 
([Zero Score Answers]+ 0.0) / ([Zero Score Answers]+ [Non Zero Score Answers]+ 0.0) desc

Это сортируется по соотношению ответов с нулевой оценкой к общему количеству ответов.

Другие вопросы по тегам