Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Warum funktioniert diese Abfrage mit maximal N Mitgliedern pro Gruppe?

Die korrelierte Unterabfrage gibt die Anzahl der Personen mit demselben Land und einer höheren ID zurück. Wenn Sie das also mit < 2 vergleichen Sie wählen nur die beiden höchsten IDs für jedes Land aus. Sie können sich das besser vorstellen, indem Sie sich die Ergebnisse der Auswahl der Unterabfrage ansehen, anstatt sie als Einschränkung zu verwenden:

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=9c3cfe469dd299b3160d09e97e73 e

Beachten Sie, dass diese Abfrage O(N^2) sein wird, es sei denn, es gibt Optimierungen, die speziell nach diesem Muster suchen, was ich stark bezweifle.