Vous êtes très proche de la dernière requête. Ce qui suit en trouve un mod :
SELECT value, occurs
FROM (SELECT value,count(*) as occurs
FROM t200
GROUP BY `value`
LIMIT 1
) T1
Je pense que votre question concernait plusieurs modes, cependant :
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
);
MODIFIER :
C'est beaucoup plus facile dans presque toutes les autres bases de données. MySQL ne supporte ni with
ni fenêtres/fonctions analytiques.
Votre requête (illustrée ci-dessous) ne fait pas ce que vous pensez :
SELECT value, occurs
FROM (SELECT value, count(*) as occurs
FROM t200
GROUP BY `value`
) T1
HAVING occurs = max(occurs) ;
Le dernier having
la clause fait référence à la variable occurs
mais utilise max(occurs)
. En raison de l'utilisation de max(occurs)
il s'agit d'une requête d'agrégation qui renvoie une ligne, résumant toutes les lignes de la sous-requête.
La variable occurs
n'utilise pas pour le regroupement. Alors, quelle valeur MySQL utilise-t-il ? Il utilise une méthode arbitraire valeur de l'une des lignes de la sous-requête. Cette valeur arbitraire peut correspondre ou non. Mais la valeur ne provient que d'une seule ligne. Il n'y a pas d'itération dessus.