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

MySQL-Abfrage, um die modalen Mittelwerte einer Spalte zu erhalten?

So erhalten Sie Rohdaten

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

So erhalten Sie den modalen Durchschnitt (hier werden mehrere Werte angezeigt, wenn es Gleichstände für die höchste Zahl gibt)

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

Dies verwendet einen MySQL-Trick, bei dem eine Variable verwendet wird, um die maximale Anzahl zu speichern, während sie die aggregierte Unterabfrage durchläuft. Zusammenfassung der Vorgänge

  • O(n):Tabelle einmal scannen und Zählungen aufbauen (T1)
  • O(n):scanne die abgeleitete Tabelle T1 und behalte die höchste Zahl in der Variablen @r (T2)
  • O(n):scanne die abgeleitete Tabelle T2 und filtere nur nach den Höhen mit der höchsten Anzahl