Есть ли более простой способ найти MODE (S) некоторых значений в MySQL

MODE - это значение, которое встречается САМЫЕ раз в данных, может быть ОДИН РЕЖИМ или МНОГИЕ РЕЖИМЫ

Вот's некоторые значения в двух таблицах (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);

прямо сейчас, чтобы получить РЕЖИМ (S), возвращенный в виде списка через запятую, я запускаю приведенный ниже запрос для таблицыt100

     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;

и ниже запрос для таблицыt200 (тот же запрос только с измененным именем таблицы) У меня есть 2 таблицы в этом примере, потому что показать, что это работает для случаев, когдаs 1 РЕЖИМ и где есть несколько РЕЖИМОВ.

     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;

Мой вопрос "Есть ли более простой способ?

Я думал, как использоватьHAVING count(*) = max(count(*)) или что-то подобное, чтобы избавиться от дополнительного соединения, но не могт получитьHAVING чтобы вернуть результат, который я хотел.

ОБНОВЛЕНО: как предложено @zneak, я могу упроститьT3 как ниже:

     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;

Теперь есть ли способ получить поездку на T3 в целом? Я пытался это, но по какой-то причине он не возвращает строк

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

в основном мне интересно, если естьs способ сделать это так, что мне нужно только указатьt100 или жеt200 один раз.

ОБНОВЛЕНО: я нашел способ указатьt100 или жеt200 только один раз, добавив переменную, чтобы установить мои собственные maxoccurs, как показано ниже

  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

Ответы на вопрос(1)

Ваш ответ на вопрос