sql >> Database teknologi >  >> RDS >> Mysql

Er der en enklere måde at finde MODE(S) af nogle værdier i MySQL

Du er meget tæt på den sidste forespørgsel. Følgende finder en tilstand:

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

Jeg tror dog, at dit spørgsmål handlede om flere tilstande:

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:

Dette er meget nemmere i næsten enhver anden database. MySQL understøtter hverken with heller ikke vindue/analytiske funktioner.

Din forespørgsel (vist nedenfor) gør ikke, hvad du tror, ​​den gør:

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

Det sidste having klausul refererer til variablen occurs men bruger max(occurs) . På grund af brugen af ​​max(occurs) dette er en aggregeringsforespørgsel, der returnerer én række, der opsummerer alle rækker fra underforespørgslen.

Variablen occurs bruger ikke til gruppering. Så hvilken værdi bruger MySQL? Den bruger en vilkårlig værdi fra en af ​​rækkerne i underforespørgslen. Denne vilkårlige værdi matcher muligvis, eller den passer måske ikke. Men værdien kommer kun fra én række. Der er ingen iteration over det.




  1. Sådan får du *alt* tilbage fra en lagret procedure ved hjælp af JDBC

  2. Sådan fungerer IF-erklæringen i SQL Server

  3. Omdøb en fremmednøgle i SQL Server ved hjælp af T-SQL

  4. Sådan ændres gendannelsesmodellen for en SQL Server-database ved hjælp af T-SQL