Existe uma maneira mais simples de encontrar MODO (S) de alguns valores no MySQL

MODO é o valor que ocorre nos horários MAIS nos dados, pode haver UM MODO ou MUITOS MODOS

aqui estão alguns valores em duas tabelas (sqlFiddle)

create table t100(id int auto_increment primary key, value int);
create table t200(id int auto_increment primary key, value int);

insert into t100(value) values (1),
                               (2),(2),(2),
                               (3),(3),
                               (4);
insert into t200(value) values (1),
                               (2),(2),(2),
                               (3),(3),
                               (4),(4),(4);

agora, para obter o MODO (S) retornado como lista separada por vírgula, eu corro a consulta abaixo para tabelat100

     SELECT GROUP_CONCAT(value) as modes,occurs
     FROM
        (SELECT value,occurs FROM 
           (SELECT value,count(*) as occurs
            FROM
            T100
            GROUP BY value)T1,
        (SELECT max(occurs) as maxoccurs FROM 
            (SELECT value,count(*) as occurs
             FROM
             T100
             GROUP BY value)T2
        )T3
        WHERE T1.occurs = T3.maxoccurs)T4
      GROUP BY occurs;

e a consulta abaixo para tabelat200 (mesma consulta apenas com o nome da tabela alterado) Eu tenho 2 tabelas neste exemplo porque para mostrar que ele funciona para casos em que há 1 modo e onde existem vários modos.

     SELECT GROUP_CONCAT(value) as modes,occurs
     FROM
        (SELECT value,occurs FROM 
           (SELECT value,count(*) as occurs
            FROM
            T200
            GROUP BY value)T1,
        (SELECT max(occurs) as maxoccurs FROM 
            (SELECT value,count(*) as occurs
             FROM
             T200
             GROUP BY value)T2
        )T3
        WHERE T1.occurs = T3.maxoccurs)T4
      GROUP BY occurs;

Minha pergunta é "Existe uma maneira mais simples?"

Eu estava pensando em usarHAVING count(*) = max(count(*)) ou algo semelhante para se livrar da junção extra, mas não conseguiuHAVING para devolver o resultado que eu queria.

ATUALIZADO: como sugerido por @zneak, posso simplificarT3 como abaixo:

     SELECT GROUP_CONCAT(value) as modes,occurs
     FROM
        (SELECT value,occurs FROM 
           (SELECT value,count(*) as occurs
            FROM
            T200
            GROUP BY value)T1,
        (SELECT count(*) as maxoccurs
             FROM
             T200
             GROUP BY value
             ORDER BY count(*) DESC
             LIMIT 1
        )T3
        WHERE T1.occurs = T3.maxoccurs)T4
      GROUP BY occurs;

Agora existe uma maneira de obter passeio de T3 no total? Eu tentei isso, mas não retorna nenhuma linha por algum motivo

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

basicamente eu estou querendo saber se há uma maneira de fazer isso de tal forma que eu só preciso especificart100 out200 uma vez.

ATUALIZADO: encontrei uma maneira de especificart100 out200 apenas uma vez adicionando uma variável para definir meus próprios maxocurs como abaixo

  SELECT GROUP_CONCAT(CASE WHEN occurs=@maxoccurs THEN value ELSE NULL END) as modes 
  FROM 
    (SELECT value,occurs,@maxoccurs:=GREATEST(@maxoccurs,occurs) as maxoccurs
     FROM (SELECT value,count(*) as occurs
           FROM t200
           GROUP BY `value`)T1,(SELECT @maxoccurs:=0)mo
     )T2

questionAnswers(1)

yourAnswerToTheQuestion