sql >> Databasteknik >  >> RDS >> Mysql

MySQL:varför fungerar denna max N medlemmar per gruppfråga?

Den korrelerade underfrågan returnerar antalet personer med samma land och ett högre id. Så om du jämför det med < 2 du kommer bara att välja de två högsta ID:n för varje land. Du kan få en bättre uppfattning om detta genom att titta på resultaten av att välja underfrågan istället för att använda den som en begränsning:

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=9c3cfe469dd299b3160d09e97e73e499">https://dbfiddle.uk/?rdbms=9c3cfe469dd29ed

Observera att om det inte finns optimeringar som specifikt letar efter detta mönster, vilket jag starkt tvivlar på, kommer denna fråga att vara O(N^2).



  1. skapa tabell med sequence.nextval i oracle

  2. PHP, MySQL, SELECT-fråga

  3. PostgreSQL Connection Pooling:Del 3 – Pgpool-II

  4. Skapa en PostgreSQL-användare och lägga till dem i en databas