Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :pourquoi cette requête max N membres par groupe fonctionne-t-elle ?

La sous-requête corrélée renvoie le nombre de personnes ayant le même pays et un identifiant supérieur. Donc, si vous comparez cela avec < 2 vous ne sélectionnerez que les deux identifiants les plus élevés pour chaque pays. Vous pouvez vous en faire une meilleure idée en examinant les résultats de la sélection de la sous-requête au lieu de l'utiliser comme contrainte :

SELECT co.id, co.person, co.country,
    (
        SELECT COUNT(*)
        FROM person ci
        WHERE  co.country = ci.country      -- controlling grouping column
        AND co.id < ci.id                       -- controlling min or max 
    ) AS higher_ids
FROM person co

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=9c3cfe469dd299b3160d09e97e73>

Notez qu'à moins qu'il n'y ait des optimisations qui recherchent spécifiquement ce modèle, ce dont je doute fortement, cette requête sera O(N^2).