Quais eleições não-SO tiveram mais candidatos?
Cada eleição de moderador de site do Stack Exchange tem uma caixa na barra lateral que diz:
Após 7 dias, os 30 melhores indicados, ordenados por reputação, avançam para a fase primária. No entanto, se houver 10 ou menos candidatos, passamos diretamente para a fase de eleição.
A parte sobre os "30 melhores" nunca foi relevante em nenhuma eleição que vi. Mesmo nas últimas eleições no site principal Stack Overflow, não houve tantos como 30 candidatos. Eu ia perguntar "isso já foi relevante fora do SO", mas deixe-me fazer uma pergunta um pouco mais ampla:
quais eleições mod, fora do SO, tiveram mais candidatos?
Obviamente, eu poderia vasculhar as páginas de todos os sites /election
para encontrar essas informações, mas talvez alguém conheça uma maneira mais fácil (ou já tenha coletado os dados).
Respostas
Três eleições com muitos candidatos (só de memória, não os eliminei - talvez ArtOfCode tenha algum código para isso):
- a eleição de Matemática de 2014 , com 23 candidatos, dos quais 20 avançaram para a fase primária (o limite era diferente, ao que parece);
- a eleição de 2016 para a construção de mundos com 19 candidatos;
- a eleição do Magento 2018 com 19 candidatos.
Isso não conta os candidatos cujas nomeações foram excluídas (por terem sido recentemente suspensas ou postar uma indicação de piada óbvia).
Permita-me oferecer esta consulta SEDE .
Isso não retornará o resultado correto, mas pode ajudá-lo a encontrar a resposta correta ao aplicar a abordagem descrita na resposta de Glorfindel.
Minha consulta mostra a classificação das eleições com base em todas as nomeações reais já postadas para aquela eleição específica. SE gentilmente ainda fornece as indicações que foram retiradas também.
Não encontrei nenhuma maneira no esquema público de determinar se eles foram retirados. É por isso que a resposta de Glorfindel está correta e esta não.
Então, aqui está a besta de vários sites com uma tabela temporária e índice temporário insanos e um número ainda mais insano de subconsultas.
Eu confio nessa consulta o fato de que as nomeações são registradas como postagens com posttypeid = 6. Essas postagens acontecerão apenas em um curto período de 7 dias e esses períodos são significativamente separados uns dos outros.
Ao ordenar as postagens na data de criação e usando uma função LAG e LEAD para encontrar o tempo em dias entre as postagens, você pode descobrir onde está o início e o fim de um período, pois esses terão uma diferença em dias superior a 7. A função DateDiff vem a calhar aí. Considerei 42 como o ponto de inflexão, permitindo longos períodos de indicação. Assim que você tiver essas datas de início e término, sua ordem determinará qual é o número da eleição. A partir daí, é uma questão de reintegrar os cargos no intervalo de datas encontrado para cada eleição para dar o número de indicados para uma eleição.
O nome do site da coluna está vinculado à página de eleição correta. Lá você pode encontrar o número de candidatos reais. Isso também dirá quantos indicados se retiraram, ou foram retirados, se você comparar isso com o número no resultado da consulta 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
Quando executado hoje, este é o resultado principal:

Lembre-se de que o SEDE é atualizado uma vez por semana no domingo.
Vamos elogiar a amável Monica Cellio pelo incrível Tutorial SEDE que ela escreveu.
Diga "Oi" no bate-papo SEDE .