Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли по-прост начин да намерите MODE(S) на някои стойности в MySQL

Много сте близо с последното запитване. Следното намира един режим:

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

Мисля, че въпросът ви обаче беше за множество режими:

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

РЕДАКТИРАНЕ:

Това е много по-лесно в почти всяка друга база данни. MySQL не поддържа нито with нито прозорци/аналитични функции.

Вашата заявка (показана по-долу) не прави това, което смятате, че прави:

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

Окончателното having клауза се отнася до променливата occurs но използва max(occurs) . Поради използването на max(occurs) това е заявка за агрегиране, която връща един ред, обобщавайки всички редове от подзаявката.

Променливата occurs не се използва за групиране. И така, каква стойност използва MySQL? Той използва произволен стойност от един от редовете в подзаявката. Тази произволна стойност може да съвпада, а може и да не. Но стойността идва само от един ред. Няма повторение.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .Net ORM, който работи добре с MySQL

  2. Импортиране на csv в mysql чрез команден ред

  3. Най-добрият инструмент за синхронизиране на MySQL бази данни

  4. Топ десет GUI инструмента на MySQL

  5. Не мога да инсталирам mysql gem на Mac OS X