sql >> Database >  >> RDS >> Mysql

MySQL:waarom werkt deze max. N-leden per groepsquery?

De gecorreleerde subquery retourneert het aantal personen met hetzelfde land en een hogere id. Dus als je dat vergelijkt met < 2 u selecteert alleen de twee hoogste id's voor elk land. U krijgt hier misschien een beter idee van door te kijken naar de resultaten van het selecteren van de subquery in plaats van deze als beperking te gebruiken:

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=ddd499

Merk op dat, tenzij er optimalisaties zijn die specifiek op zoek zijn naar dit patroon, wat ik ten zeerste betwijfel, deze zoekopdracht O(N^2) zal zijn.



  1. waarde invoegen van html select-formulier in mysql-database

  2. Hoe zojuist verwijderde rijen in mysql te herstellen?

  3. PHP/MYSQL staat slechts één stem per lid toe?

  4. ER-diagrammen in IRI Workbench