sql >> Base de Datos >  >> RDS >> Mysql

¿Existe una forma más sencilla de encontrar MODE (S) de algunos valores en MySQL?

Estás muy cerca de la última consulta. Lo siguiente encuentra uno modo:

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

Sin embargo, creo que tu pregunta era sobre múltiples modos:

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
               );

EDITAR:

Esto es mucho más fácil en casi cualquier otra base de datos. MySQL no admite with ni funciones de ventana/analíticas.

Su consulta (que se muestra a continuación) no hace lo que cree que está haciendo:

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

El having final cláusula se refiere a la variable occurs pero usa max(occurs) . Debido al uso de max(occurs) esta es una consulta de agregación que devuelve una fila, resumiendo todas las filas de la subconsulta.

La variable occurs no está usando para agrupar. Entonces, ¿qué valor usa MySQL? Utiliza un arbitrario valor de una de las filas de la subconsulta. Este valor arbitrario puede coincidir o no. Pero, el valor solo proviene de una fila. No hay iteración sobre él.