Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:selecione N linhas, mas com apenas valores exclusivos em uma coluna


Provavelmente não é a solução mais elegante, e o desempenho de IN pode sofrer em mesas maiores.

A consulta aninhada obtém o mínimo Birthyear para cada cidade. Somente registros que tenham este Birthyear são correspondidos na consulta externa. Ordenando por idade e limitando a 3 resultados, você obtém as 3 pessoas mais velhas que também são as mais velhas em sua cidade (Egon Spengler desiste ..)
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  |
+-----------------+-------------+------+----+

Editar - adicionado GROUP BY City à consulta externa, pois pessoas com os mesmos anos de nascimento retornariam vários valores. O agrupamento na consulta externa garante que apenas um resultado seja retornado por cidade, se mais de uma pessoa tiver esse mínimo de Birthyear . O ct a coluna mostrará se existir mais de uma pessoa na cidade com esse Birthyear