후보자가 가장 많은 비 SO 선거는 무엇입니까?
모든 Stack Exchange 사이트 중재자 선택에는 사이드 바에 다음과 같은 상자가 있습니다.
7 일이 지나면 평판 순으로 정렬 된 상위 30 명의 후보가 1 차 단계로 진행됩니다. 그러나 후보자가 10 명 이하인 경우 선거 단계로 바로 건너 뜁니다.
내가 본 어떤 선거에서도 "톱 30"에 대한 내용은 전혀 관련이 없습니다. 주력 사이트 인 Stack Overflow에서 지난 몇 차례의 선거에서도 30 명 이하의 후보가있었습니다. 나는 "이것이 SO 외부와 관련이 있었습니까?"라고 물 으려고했지만 약간 더 광범위한 질문을하겠습니다.
SO 이외의 어떤 모드 선거에서 가장 많은 후보가 있었습니까?
분명히이 /election
정보를 찾기 위해 모든 사이트의 페이지를 탐색 할 수 있지만 누군가가 더 쉬운 방법을 알고 있거나 이미 데이터를 수집했을 수 있습니다.
답변
많은 후보자가있는 세 번의 선거 (기억에서 긁어 본 적이 없습니다. 아마도 ArtOfCode에 이에 대한 코드가있을 것입니다) :
- 23 명의 후보가 있는 2014 년 수학 선거 , 그중 20 명이 1 차 단계에 진출했습니다 (한도는 다른 것 같습니다).
- 19 명의 후보가 있는 2016 년 Worldbuilding 선거 ;
- 19 명의 후보가 있는 2018 Magento 선거 .
(최근 중단되었거나 명백한 농담 지명을 게시했기 때문에) 지명이 삭제 된 후보는 여기에 포함되지 않습니다.
이 SEDE 쿼리 를 제공 할 수 있습니다 .
이것은 올바른 결과를 반환하지는 않지만 Glorfindel의 답변에 설명 된 접근 방식을 적용 할 때 올바른 답변을 찾는 데 도움이 될 수 있습니다.
내 쿼리는 특정 선거에 대해 게시 된 모든 실제 후보를 기반으로 한 선거 순위를 보여줍니다. SE는 여전히 철회 된 지명을 친절하게 제공합니다.
나는 그들이 철회되었음을 확인할 방법을 공개 스키마에서 찾지 못했습니다. 그렇기 때문에 Glorfindel의 대답은 정확하고 이것은 그렇지 않습니다.
그래서 여기에 미친 임시 테이블과 임시 인덱스와 훨씬 더 많은 하위 쿼리가있는 다중 사이트 짐승이 있습니다.
이 쿼리는 추천이 posttypeid = 6 인 게시물로 기록된다는 사실에 의존합니다. 이러한 게시물은 짧은 7 일 동안 만 발생하며이 기간은 서로 크게 다릅니다.
생성 일에 게시물을 주문하고 LAG 및 LEAD 함수를 사용하여 게시물 사이의 시간을 찾으면 기간의 시작과 끝이 7보다 큰 날짜 차이를 가지기 때문에 위치를 찾을 수 있습니다. DateDiff 함수 거기에 편리합니다. 나는 42를 전환점으로 삼았고 지명 기간을 연장했습니다. 시작일과 종료일이 있으면 순서에 따라 선거 번호가 결정됩니다. 거기에서 선거 후보자 수를 제공하기 위해 각 선거에 대해 찾은 날짜 범위에 게시물에 다시 가입하는 문제입니다.
열 사이트 이름 은 올바른 선택 페이지로 연결됩니다. 여기에서 실제 후보자의 수를 찾을 수 있습니다. 또한 SEDE 쿼리 결과의 숫자와 비교하면 얼마나 많은 후보자가 철회했거나 철회되었는지도 알 수 있습니다.
declare @sql nvarchar(max)
create table #result (site sysname
, hostname sysname
, id integer
, creationdate datetime
)
create index #idx_hn_cd on #result(hostname, creationdate)
select @sql = N'insert into #result' + STRING_AGG(concat(N'
select ''', name ,N''' as site
, ''',hostname ,N'''
, pm.id
, pm.creationdate
from ', quotename(name), N'.dbo.posts pm
where pm.posttypeid = 6
'),N'
union all')
from (select convert(nvarchar(max),name) name
-- , convert(nvarchar(max),sitename) sitename
-- , meta
-- , domain
, concat(
-- based on an idea from Glorfindel
-- https://meta.stackexchange.com/a/321181
(case sitename
WHEN 'Audio' THEN 'video'
WHEN 'Beer' THEN 'alcohol'
WHEN 'CogSci' THEN 'psychology'
WHEN 'Garage' THEN 'mechanics'
WHEN 'Health' THEN 'medicalsciences'
WHEN 'Moderators' THEN 'communitybuilding'
WHEN 'Photography' THEN 'photo'
WHEN 'Programmers' THEN 'softwareengineering'
WHEN 'Vegetarian' THEN 'vegetarianism'
WHEN 'Writers' THEN 'writing'
WHEN 'Br' THEN 'pt'
WHEN 'Mathoverflow' THEN concat((meta+'.'), sitename)
ELSE case when sitename = domain then null else sitename end
end +'.')
, (case
when sitename <> 'mathoverflow' then (meta+'.')
else null
end)
, (case
when sitename <> 'mathoverflow' then concat((domain + '.'), 'com')
else 'net'
end)
) hostname
from (
select name
, case parsename(name,1)
when 'Meta' then parsename(name,2)
else parsename(name,1)
end [sitename]
, case parsename(name,1)
when 'Meta' then 'meta'
else null
end [meta]
, coalesce(parsename(name,3), parsename(name,2)) [domain]
from sys.databases
where database_id > 5
and (name not like '%.Meta') -- only main sites have elections
) dbs
) dbsall
exec (@sql)
select rank() over (order by count(*) desc) [ranking]
, s2 [Site name]
, election [election]
, start
, [end]
, count(*) [# nominees]
from
(
select ele_data.s2
, election
, min(ele_data.creationdate) start
, max(ele_data.creationdate) [end]
from
(
select data.s1 s2
, ceiling((row_number() over(partition by data.s1 order by creationdate) ) / 2.0) election
-- , min(creationdate) se
-- , max(creationdate) ee
, *
from (
select #result.site [s1]
, id
, datediff(
d
, lag(creationdate, 1 , '2008-09-01') over(partition by site order by creationdate)
, creationdate) [days prev]
, datediff(
d
, creationdate
,lead(creationdate, 1 , getdate()) over(partition by site order by creationdate)
) [days next]
, creationdate
from #result
) data
where [days prev] > 42 or [days next]> 42
) ele_data
group by ele_data.s2, election
) rollup
inner join #result r
on r.site = s2
and r.creationdate between start and [end]
where s2 <> 'StackOverflow'
group by s2, election, start, [end]
order by count(*) desc
오늘 실행하면 다음과 같은 결과가 나타납니다.
SEDE는 매주 일요일에 업데이트됩니다. 그녀가 쓴 멋진 SEDE Tutorial에 대해 Monica Cellio 를
칭찬합시다 . SEDE 채팅 에서 "안녕하세요"라고 말하세요 .