可能不是最优雅的解决方案,并且IN
在更大的桌子上,其性能可能会受到影响。
嵌套查询获取Birthyear
每个城市的最小值。只有具有此Birthyear
条件的记录才在外部查询中匹配。按年龄排序,然后限制为3个结果,则可以使您成为所在城市中年龄最大的3个最老的人(Egon Spengler退学。)
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 |
+-----------------+-------------+------+----+
-添加GROUP BY City
到外部查询中,因为具有相同出生年份的人将返回多个值。如果对外部查询进行分组,则可以确保每个城市仅返回一个结果,如果超过一个人的最小值为Birthyear
。该ct
列将显示该城市中是否存在不止一个人Birthyear