sql >> Base de Datos >  >> Database Tools >> phpMyAdmin

¿Consulta MySQL para obtener los promedios modales de una columna?

Para obtener recuentos sin procesar

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

Para obtener el promedio modal (esto mostrará múltiples valores si hay empates para el conteo más 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

Esto usa un truco de MySQL de usar una variable para almacenar el recuento máximo a medida que pasa por la subconsulta agregada. Resumen de operaciones

  • O(n):escanear la tabla una vez y construir los conteos (T1)
  • O(n):escanee la tabla derivada T1 y mantenga el conteo más alto en la variable @r (T2)
  • O(n):escanea la tabla derivada T2 y filtra solo las alturas con el conteo más alto