如何查询特定城市在国内的人口排名(数据库实现)
如何查询特定城市的国内人口排名?
嗨,不用纠结数组啦,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




