Pemilu non-SO mana yang memiliki kandidat terbanyak?
Setiap pemilihan moderator situs Stack Exchange memiliki kotak di sidebar yang bertuliskan:
Setelah 7 hari, 30 nominasi teratas, diurutkan berdasarkan reputasi, maju ke fase utama. Namun, jika ada 10 calon atau kurang, kita langsung lompat ke tahap pemilihan.
Sedikit tentang "30 teratas" tidak pernah relevan dalam pemilu mana pun yang pernah saya lihat. Bahkan dalam beberapa pemilihan terakhir di situs andalan Stack Overflow, belum ada sebanyak 30 kandidat. Saya akan bertanya "apakah ini pernah relevan di luar SO", tapi izinkan saya mengajukan pertanyaan yang sedikit lebih luas:
pemilihan mod mana, di luar SO, yang memiliki kandidat terbanyak?
Jelas saya dapat menelusuri semua /election
halaman situs untuk menemukan informasi ini, tetapi mungkin seseorang mengetahui cara yang lebih mudah (atau telah mengumpulkan data).
Jawaban
Tiga pemilu dengan banyak kandidat (hanya dari ingatan, saya belum menghapusnya - mungkin ArtOfCode memiliki beberapa kode untuk ini):
- yang 2014 Matematika pemilu , dengan 23 calon, dimana 20 maju ke fase utama (batas itu berbeda maka, tampaknya);
- yang pemilu 2016 Worldbuilding dengan 19 calon;
- yang 2018 pemilu Magento dengan 19 kandidat.
Ini tidak menghitung kandidat yang nominasinya dihapus (karena baru-baru ini ditangguhkan, atau memposting nominasi lelucon yang jelas).
Izinkan saya untuk menawarkan kueri SEDE ini .
Ini tidak akan mengembalikan hasil yang benar tetapi ini dapat membantu Anda menemukan jawaban yang benar ketika Anda menerapkan pendekatan yang dijelaskan dalam jawaban oleh Glorfindel.
Kueri saya menunjukkan peringkat pemilu berdasarkan semua nominasi aktual yang pernah diposting untuk pemilu tersebut. SE berbaik hati masih memberikan nominasi yang ditarik juga.
Saya tidak menemukan cara dalam skema publik untuk menentukan bahwa mereka ditarik. Itulah mengapa jawaban dari Glorfindel benar dan yang ini tidak.
Jadi inilah monster multi-situs dengan tabel temp yang gila dan indeks temp dan bahkan jumlah sub-kueri yang lebih gila lagi.
Saya mengandalkan kueri ini pada fakta bahwa nominasi dicatat sebagai posting dengan posttypeid = 6. Posting ini hanya akan terjadi dalam periode 7 hari yang singkat dan periode ini secara signifikan terpisah satu sama lain.
Dengan memesan Posts on CreationDate dan menggunakan LAG dan LEAD fungsi untuk menemukan waktu di hari antara posting Anda dapat menemukan di mana awal dan akhir periode adalah, sebagai orang-orang akan memiliki perbedaan dalam hari yang lebih kemudian 7. DateDiff fungsi berguna di sana. Saya mengambil 42 sebagai titik kritis, memungkinkan periode nominasi yang diperpanjang. Setelah Anda mengetahui tanggal mulai dan akhir ini, urutannya akan menentukan nomor pemilihannya. Dari sana, tinggal bergabung dengan pos lagi pada rentang tanggal yang ditemukan untuk setiap pemilu untuk mengetahui jumlah calon dalam pemilu.
Nama situs kolom tertaut ke halaman pemilihan yang benar. Di sana Anda dapat menemukan jumlah kandidat yang sebenarnya. Itu juga akan memberi tahu berapa banyak nominasi yang mundur, atau ditarik, jika Anda membandingkannya dengan jumlah di hasil kueri 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
Jika dijalankan hari ini, seperti inilah hasil teratasnya:

Ingatlah bahwa SEDE diperbarui seminggu sekali pada hari Minggu.
Mari puji Monica Cellio yang baik hati untuk Tutorial SEDE yang dia tulis.
Ucapkan "Hai" dalam obrolan SEDE .