sql >> Databasteknik >  >> RDS >> Mysql

Finns det ett enklare sätt att hitta MODE(S) för vissa värden i MySQL

Du är väldigt nära den sista frågan. Följande hittar en läge:

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

Jag tror dock att din fråga handlade om flera lägen:

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:

Detta är mycket enklare i nästan vilken annan databas som helst. MySQL stöder varken with inte heller fönster/analytiska funktioner.

Din fråga (visas nedan) gör inte vad du tror att den gör:

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

Det sista having sats hänvisar till variabeln occurs men använder max(occurs) . På grund av användningen av max(occurs) detta är en aggregeringsfråga som returnerar en rad och sammanfattar alla rader från underfrågan.

Variabeln occurs används inte för gruppering. Så, vilket värde använder MySQL? Den använder en godtycklig värde från en av raderna i underfrågan. Detta godtyckliga värde kanske matchar eller inte. Men värdet kommer bara från en rad. Det finns ingen iteration över det.




  1. Flytta en MariaDB-databas till krypterade och okrypterade tillstånd

  2. Viloläge skicka överflödiga frågor till databasen

  3. Hur fungerar MySQL-vyer?

  4. MySQL MONTHNAME() från siffror