SO olmayan hangi seçimler en çok adayı aldı?

Aug 17 2020

Her Stack Exchange site moderatörü seçiminin kenar çubuğunda şunu belirten bir kutu vardır:

7 gün sonra, itibara göre sıralanan ilk 30 aday birincil aşamaya geçer. Ancak 10 veya daha az aday varsa, doğrudan seçim aşamasına geçiyoruz.

"En iyi 30" hakkındaki kısım, gördüğüm hiçbir seçimle hiç alakalı olmamıştı. Amiral gemisi sitesi Stack Overflow'daki son birkaç seçimde bile 30 kadar aday çıkmadı. "Bu SO dışında hiç alakalı mıydı" diye soracaktım, ama biraz daha geniş bir soru sormama izin verin:

SO dışındaki hangi mod seçimleri en çok adayı aldı?

Açıkçası /election, bu bilgiyi bulmak için tüm sitelerin sayfalarında gezinebilirdim , ama belki birisi daha kolay bir yol biliyordur (veya verileri zaten toplamıştır).

Yanıtlar

12 Glorfindel Aug 17 2020 at 01:19

Çok sayıda adayın olduğu üç seçim (sadece hafızamdan, onları kandırmadım - belki de ArtOfCode'un bunun için bir kodu vardır):

  • 20'si birincil aşamaya geçen 23 adayın yer aldığı 2014 Matematik seçimi (o zamanlar sınır farklı görünüyordu);
  • 2016 Worldbuilding seçim 19 adayla;
  • 2018 Magento seçim 19 adaylarla.

Bu, adaylıkları silinen adayları kapsamaz (kısa süre önce askıya alındığı veya bariz bir şaka-adaylığı yayınladığı için).

12 rene Aug 17 2020 at 21:12

Bu SEDE sorgusunu sunmama izin verin .

Bu, doğru sonucu döndürmez, ancak Glorfindel'in yanıtında açıklanan yaklaşımı uyguladığınızda doğru yanıtı bulmanıza yardımcı olabilir.

Sorgum, belirli bir seçim için şimdiye kadar yayınlanan tüm gerçek adaylara göre seçim sıralamasını gösterir. SE nazikçe geri çekilen adayları da veriyor.

Genel şemada geri çekildiklerini belirlemenin hiçbir yolunu bulamadım. Bu nedenle Glorfindel'in cevabı doğru ve bu doğru değil.

İşte çılgın bir geçici tablo ve geçici indeks ve daha da çılgın sayıda alt sorguya sahip çok siteli canavar.

Bu sorguya, adayların posttypeid = 6 ile gönderiler olarak kaydedildiğine güveniyorum. Bu gönderiler yalnızca 7 günlük kısa bir süre içinde gerçekleşecek ve bu süreler birbirinden önemli ölçüde ayrıdır.

Gönderileri oluşturulma tarihinde sıralayarak ve bir LAG ve LEAD işlevini kullanarak bir dönemin başlangıcı ve bitiminin nerede olduğunu bulabilirsiniz, çünkü günler arasında 7'den fazla farklılık olacaktır. DateDiff işlevi orada işe yarıyor. 42'yi devrilme noktası olarak aldım ve daha uzun adaylık sürelerine izin verdim. Bu başlangıç ​​ve bitiş tarihlerini aldıktan sonra, sıraları seçim numarasının ne olduğunu belirler. Oradan, bir seçim için aday sayısını vermek için her seçim için bulunan tarih aralığında görevlere tekrar katılma meselesidir.

Sütun site adı doğru seçim sayfasına bağlanır. Orada gerçek adayların sayısını bulabilirsiniz. SEDE sorgusu sonucundaki sayı ile karşılaştırırsanız, bu aynı zamanda kaç adayın geri çekildiğini veya geri çekildiğini de gösterir.

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

Bugün çalıştırıldığında, en iyi sonuç şöyle görünür:

SEDE'nin haftada bir Pazar günü güncellendiğini unutmayın. Monica Cellio'ya yazdığı harika SEDE Eğitimi için
övgüde bulunalım . SEDE sohbetinde "Merhaba" deyin .