sql >> Databáze >  >> RDS >> Mysql

Existuje jednodušší způsob, jak najít MODE(S) některých hodnot v MySQL

S posledním dotazem jste velmi blízko. Následující text najde jeden režim:

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

Myslím, že vaše otázka se týkala několika režimů:

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

EDIT:

To je mnohem jednodušší v téměř jakékoli jiné databázi. MySQL nepodporuje ani with ani okenní/analytické funkce.

Váš dotaz (zobrazený níže) nedělá to, co si myslíte, že dělá:

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

Poslední having klauzule odkazuje na proměnnou occurs ale používá max(occurs) . Kvůli použití max(occurs) toto je agregační dotaz, který vrací jeden řádek shrnující všechny řádky z poddotazu.

Proměnná occurs nepoužívá se pro seskupování. Jakou hodnotu tedy používá MySQL? Používá libovolnou hodnotu z jednoho z řádků v poddotazu. Tato libovolná hodnota se může shodovat, ale také nemusí. Hodnota však pochází pouze z jednoho řádku. Není nad tím žádná iterace.




  1. Jak ukládat adresy URL v MySQL

  2. MySQL seskupení tabulek podle součtu problém

  3. PostgreSQL JOIN s typem pole s pořadím prvků pole, jak implementovat?

  4. Úvod do automatického škálování Amazon Web Services (AWS).