Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:por que esse máximo de N membros por consulta de grupo funciona?


A subconsulta correlacionada retorna o número de pessoas com o mesmo país e um id superior. Então, se você comparar isso com < 2 você selecionará apenas os dois IDs mais altos para cada país. Você pode ter uma ideia melhor disso observando os resultados da seleção da subconsulta em vez de usá-la como uma restrição:
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=9c3cfe469dd299b>3160d09e97

Observe que, a menos que haja otimizações que procurem especificamente esse padrão, o que duvido muito, essa consulta será O(N^2).