Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gibt es eine einfachere Möglichkeit, MODE(S) einiger Werte in MySQL zu finden

Mit der letzten Abfrage sind Sie ganz nah dran. Das Folgende findet einen Modus:

SELECT value, occurs
FROM (SELECT value,count(*) as occurs
      FROM t200
      GROUP BY `value`
      LIMIT 1
     ) T1

Ich denke, Ihre Frage bezog sich jedoch auf mehrere Modi:

SELECT value, occurs
FROM (SELECT value, count(*) as occurs
      FROM t200
      GROUP BY `value`
     ) T1
WHERE occurs = (select max(occurs)
                from (select `value`, count(*) as occurs
                      from t200
                      group by `value`
                     ) t
               );

BEARBEITEN:

Dies ist in fast jeder anderen Datenbank viel einfacher. MySQL unterstützt weder with noch Fenster-/Analysefunktionen.

Ihre Abfrage (siehe unten) tut nicht das, was Sie denken:

  SELECT value, occurs  
  FROM (SELECT value, count(*) as occurs
        FROM t200
        GROUP BY `value`
       ) T1
  HAVING occurs = max(occurs) ; 

Das letzte having -Klausel bezieht sich auf die Variable occurs verwendet aber max(occurs) . Wegen der Verwendung von max(occurs) Dies ist eine Aggregationsabfrage, die eine Zeile zurückgibt und alle Zeilen aus der Unterabfrage zusammenfasst.

Die Variable occurs wird nicht zum Gruppieren verwendet. Welchen Wert verwendet MySQL also? Es verwendet ein willkürliches Wert aus einer der Zeilen in der Unterabfrage. Dieser willkürliche Wert kann übereinstimmen oder auch nicht. Der Wert kommt aber nur aus einer Zeile. Es gibt keine Iteration darüber.