Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:perché questo numero massimo di N membri per query di gruppo funziona?

La subquery correlata restituisce il numero di persone con lo stesso paese e un ID più alto. Quindi, se lo confronti con < 2 selezionerai solo i due ID più alti per ogni paese. Puoi farti un'idea migliore guardando i risultati della selezione della sottoquery invece di usarla come vincolo:

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

Nota che, a meno che non ci siano ottimizzazioni che cercano specificamente questo modello, cosa di cui dubito fortemente, questa query sarà O(N^2).