sql >> Base de Datos >  >> RDS >> Mysql

MySQL:¿por qué funciona este máximo de N miembros por consulta de grupo?

La subconsulta correlacionada devuelve el número de personas con el mismo país y una identificación superior. Entonces, si comparas eso con < 2 solo seleccionará las dos identificaciones más altas para cada país. Puede tener una mejor idea de esto mirando los resultados de seleccionar la subconsulta en lugar de usarla como una restricción:

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=9c3cfe469dd299b3160d09e97e73e497e73e

Tenga en cuenta que, a menos que haya optimizaciones que busquen específicamente este patrón, lo cual dudo mucho, esta consulta será O(N^2).