2016-02-13 2 views
1

У меня есть города стола, состоящий из таких областей, как ID, Name, CountryCode и Population. Я хочу найти лучшие города N (например, N = 5) с наибольшим Population.Finding N крупнейших элементы в столбце

Очень наивным способом было бы найти город с наибольшей численностью населения, используя групповую функцию MAX(), и найти остальное по варианту упомянутого здесь метода.

What is the simplest SQL Query to find the second largest value?

Кто-нибудь знает лучший способ достижения поставленной цели?

+1

Почему не упорядочивают по численности населения по убыванию и помещают лимит N? , что даст вам N крупнейших городов по населению. –

+0

Не обязательно такая вещь, как «лучшие» города. Там может быть больше N привязано, и их может быть меньше. PS По-видимому, вы даже не пробовали поисковый файл sqackupflow sql с заголовком вопроса. – philipxy

+0

Возможный дубликат [Найти n наибольших значений в столбце] (http://stackoverflow.com/questions/12705789/find-n-largest-values-in-a-column) – philipxy

ответ

2

Если вы просто хотите, верхние города N, используя order by и limit будет гораздо более простой подход:

SELECT * 
FROM  city 
ORDER BY population DESC 
LIMIT 5 -- or any other N 
+0

Будьте осторожны, если имеется несколько строк с то же население. LIMIT может не дать ожидаемого результата. – sqlvogel

1
SELECT * 
FROM cities AS c1 
WHERE 
(SELECT COUNT(*) 
FROM cities AS c2 
WHERE c2.population > c1.population)<5; 

Этот запрос может возвращать более пяти строк, если есть несколько городов с таким же Население. Вы не указали, какой результат вы ожидаете для «топ-5», когда есть привязанные значения.