phpMyAdmin
 sql >> Base de données >  >> Database Tools >> phpMyAdmin

Requête MySQL pour obtenir les moyennes modales d'une colonne ?

Pour obtenir des décomptes bruts

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

Pour obtenir la moyenne modale (cela affichera plusieurs valeurs s'il y a des égalités pour le nombre le plus élevé)

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

Cela utilise une astuce MySQL consistant à utiliser une variable pour stocker le nombre maximum au fur et à mesure qu'il passe par la sous-requête agrégée. Résumé des opérations

  • O(n) :analysez la table une fois et créez les décomptes (T1)
  • O(n) :parcourt la table dérivée T1 et conserve le nombre le plus élevé dans la variable @r (T2)
  • O(n) :analysez la table dérivée T2 et filtrez uniquement les hauteurs avec le nombre le plus élevé