Sei molto vicino con l'ultima domanda. Quanto segue ne trova uno modalità:
SELECT value, occurs
FROM (SELECT value,count(*) as occurs
FROM t200
GROUP BY `value`
LIMIT 1
) T1
Penso che la tua domanda riguardasse più modalità, però:
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
);
MODIFICA:
Questo è molto più semplice in quasi tutti gli altri database. MySQL non supporta né with
né funzioni finestra/analitiche.
La tua query (mostrata di seguito) non fa ciò che pensi stia facendo:
SELECT value, occurs
FROM (SELECT value, count(*) as occurs
FROM t200
GROUP BY `value`
) T1
HAVING occurs = max(occurs) ;
L'ultimo having
la clausola si riferisce alla variabile occurs
ma usa max(occurs)
. A causa dell'uso di max(occurs)
questa è una query di aggregazione che restituisce una riga, riassumendo tutte le righe della sottoquery.
La variabile occurs
non sta usando per il raggruppamento. Quindi, quale valore utilizza MySQL? Usa un arbitrario valore da una delle righe nella sottoquery. Questo valore arbitrario potrebbe corrispondere o meno. Ma il valore viene solo da una riga. Non c'è alcuna iterazione su di esso.