phpMyAdmin
 sql >> Database >  >> Database Tools >> phpMyAdmin

Query MySQL per ottenere le medie modali di una colonna?

Per ottenere conteggi grezzi

select window_height, count(*) totalusers
from tbl
group by window_height
order by totalusers desc  # or by window_height

Per ottenere la media modale (questo mostrerà più valori se ci sono pareggi per il conteggio più alto)

select window_height, totalusers
from (
    select @r := if(totalusers>@r,totalusers,@r) maxcount, window_height, totalusers
    from (select @r:=0) initvars, (
        select window_height, count(*) totalusers
        from tbl
        group by window_height
    ) X ) Y
where totalusers = @r

Questo utilizza un trucco MySQL di utilizzare una variabile per memorizzare il conteggio massimo mentre passa attraverso la sottoquery aggregata. Riepilogo delle operazioni

  • O(n):scansiona la tabella una volta e costruisci i conteggi (T1)
  • O(n):scansiona la tabella derivata T1 e mantieni il conteggio più alto nella variabile @r (T2)
  • O(n):scansiona la tabella derivata T2 e filtra solo le altezze con il conteggio più alto