You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何查询特定城市在国内的人口排名(数据库实现)

如何查询特定城市的国内人口排名?

嗨,不用纠结数组啦,SQL本身就有很简洁的方法来实现这个需求,分两种常见场景给你拆解:

方法一:用窗口函数(推荐,MySQL 8.0+、PostgreSQL、SQL Server等主流数据库支持)

窗口函数是最直观高效的方式,用RANK()或者DENSE_RANK()就能直接生成排名,两者的区别在于处理同人口城市的逻辑:

  • RANK():如果多个城市人口相同,会跳过后续名次(比如名次序列是1,1,3)
  • DENSE_RANK():相同人口的城市共享名次,后续名次不跳过(比如名次序列是1,1,2)

假设你的表名叫city_population,要查询的城市是'上海',代码示例如下:

SELECT 
    City,
    Inhabitants,
    -- 这里可以根据需求换成DENSE_RANK()
    RANK() OVER(ORDER BY Inhabitants DESC) AS PopulationRank
FROM city_population
WHERE City = '上海';

原理很简单:OVER(ORDER BY Inhabitants DESC)会把所有城市按人口降序排列,RANK()函数给每个城市分配对应的名次,最后通过WHERE筛选出你要的目标城市即可。

方法二:用子查询(兼容低版本数据库,比如MySQL 5.x)

如果你的数据库不支持窗口函数,用子查询也能实现同样的效果:

SELECT 
    c1.City,
    c1.Inhabitants,
    -- 统计比当前城市人口多的城市数量,加1就是排名(和RANK()效果一致)
    (SELECT COUNT(*) + 1 
     FROM city_population c2 
     WHERE c2.Inhabitants > c1.Inhabitants) AS PopulationRank
FROM city_population c1
WHERE c1.City = '上海';

如果想要和DENSE_RANK()一样的效果,只需要把子查询里的COUNT(*)改成COUNT(DISTINCT c2.Inhabitants)即可,这样相同人口的城市只会被统计一次。

完全不需要用到数组,这些SQL原生的写法既高效又容易维护~

内容的提问来源于stack exchange,提问作者digitalmads

火山引擎 最新活动