sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Välj N rader, men med bara unika värden i en kolumn

Förmodligen inte den mest eleganta av lösningarna, och prestandan för IN kan drabbas av större bord.

Den kapslade frågan får minsta Birthyear för varje stad. Endast poster som har detta Birthyear matchas i den yttre frågan. Om du beställer efter ålder och sedan begränsar till 3 resultat får du de 3 äldsta personerna som också är de äldsta i sin stad (Egon Spengler hoppar av..)

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  |
+-----------------+-------------+------+----+

Redigera - lade till GROUP BY City till yttre fråga, eftersom personer med samma födelseår skulle returnera flera värden. Gruppering på den yttre frågan säkerställer att endast ett resultat returneras per stad, om mer än en person har det minsta Birthyear . ct kolumnen visar om det finns mer än en person i staden med det Birthyear



  1. MySQL kopieringsdatabas

  2. anpassa personsökare i psql

  3. Hur man lägger till kolumn för automatisk ökning i befintlig tabell i MySQL

  4. Öppna SQLite-frågeresultat automatiskt i Excel