sql >> Database >  >> RDS >> Mysql

MySQL:selecteer N rijen, maar met alleen unieke waarden in één kolom

Waarschijnlijk niet de meest elegante oplossing, en de prestaties van IN kan lijden op grotere tafels.

De geneste zoekopdracht krijgt het minimum Birthyear voor elke stad. Alleen records die dit Birthyear . hebben komen overeen in de buitenste query. Door op leeftijd te bestellen en vervolgens te beperken tot 3 resultaten, krijg je de 3 oudste mensen die ook de oudste in hun stad zijn (Egon Spengler valt af..)

SELECT Name, City, Birthyear, COUNT(*) AS ct
FROM table
WHERE Birthyear IN (SELECT MIN(Birthyear)
               FROM table
               GROUP by City)
GROUP BY City
ORDER BY Birthyear DESC LIMIT 3;

+-----------------+-------------+------+----+
| name            | city        | year | ct |
+-----------------+-------------+------+----+
| Henry Jones     | Chicago     | 1899 | 1  |
| Mac Taylor      | New York    | 1955 | 1  |
| Sarah Connor    | Los Angeles | 1959 | 1  |
+-----------------+-------------+------+----+

Bewerken - GROUP BY City naar buitenste query, omdat mensen met dezelfde geboortejaren meerdere waarden zouden retourneren. Groepering op de buitenste zoekopdracht zorgt ervoor dat er slechts één resultaat per stad wordt geretourneerd, als meer dan één persoon dat minimum Birthyear heeft. . De ct kolom laat zien of er meer dan één persoon bestaat in de stad met dat Birthyear



  1. Opeenvolgende SQL-records met telling

  2. Partijrelatiepatroon. Hoe relaties te modelleren

  3. Vraag terug van een door de PDO opgestelde verklaring

  4. Kunnen we een externe MySQL-database in Android verbinden met JDBC?