SQL-DataExplorer запрос топ невоспетых пользователей
Как ранее обсуждалось на мета:
Я хочу создать запрос Data Explorer, чтобы показать топ-100 самых невоспетых пользователей на StackOverflow.
То, что я имею в виду под топ-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/stackoverflow/query/218910
Результат показывает, что у пользователей есть один ответ, который не соответствует действительности, когда вы проверяете их профили.
Ответы - SQL-DataExplorer запрос топ невоспетых пользователей / SQL - DataExplorer Query Top Unsung Users

02.10.2014 06:20:19
Вы можете вытащить эту информацию с помощью Сэм Шафран-это настоящие невоспетые герои запроса. Я немного изменил его, чтобы включить только топ-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
Это сортирует по отношению нулевого балла ответов к общему количеству ответов.