【问题标题】:Finding N Largest elements in a column在列中查找 N 个最大元素
【发布时间】:2016-05-24 12:40:26
【问题描述】:

我有一个 city 表,其中包含 IDNameCountryCodePopulation 等字段。我想找到Population 最大的前 N(比如 N = 5)个城市。

一个非常幼稚的方法是使用MAX() group 函数找到人口最多的城市,然后通过这里提到的方法的变体找到其余的城市。

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

有人知道实现目标的更好方法吗?

【问题讨论】:

  • 为什么不按人口降序排列并限制N? ,这将为您提供 N 个人口最多的城市。
  • 不一定有“前N个”城市之类的东西。可能有超过 N 个并列,也可能更少。 PS显然你甚至没有尝试用你的问题标题谷歌搜索'stackoverflow sql'。

标签: mysql sql database select top-n


【解决方案1】:
SELECT *
FROM cities AS c1
WHERE
(SELECT COUNT(*)
 FROM cities AS c2
 WHERE c2.population > c1.population)<5;

如果有多个城市的人口相同,则此查询可能返回五行以上。当存在并列值时,您没有指定“前 5 名”的预期结果。

【讨论】:

    【解决方案2】:

    如果您只想要前 N 个城市,使用 order bylimit 会更简单:

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

    【讨论】:

    • 如果多行具有相同的人口,请小心。 LIMIT 可能不会给出您期望的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2015-06-24
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多