MySQL中利用简单SQL实现开窗函数的分组排序功能

 时间:2026-02-14 11:55:41

1、对原始数据进行排序:

原始数据中,数据可能比较杂乱,并未按照一定的逻辑进行排列,故此时需要重新排序。因为要获得各省分类下,各个市的GDP排名,因此选择按照省名、gpd排序。排序前和排序后分别如图所示。

MySQL中利用简单SQL实现开窗函数的分组排序功能

MySQL中利用简单SQL实现开窗函数的分组排序功能

2、增加变量判断省名是否变化:

根据需要的最终结果可知,每个省份下的市单独排序,即当省名变化时,排序号也会相应的发生变化。这就告诉我们,需要判断省名的变化。本例中分别采用@tmp作为中间变量,@rank作为排序号。

3、利用变量进行判断并排序:

IF(@tmp=province_name,@rank:=@rank + 1,@rank:=1)则利用中间变量@tmp存储上一条记录的province_name,并和当前的对比,如若相同,则序号@rank增加1,否则初始化@rank为0。

@tmp:=province_name则用于将当前的province_name值记录下来,供下一条记录使用。得到排序结果如图。

MySQL中利用简单SQL实现开窗函数的分组排序功能

MySQL中利用简单SQL实现开窗函数的分组排序功能

4、去除中间变量并筛选topN:

第三步中的结果不仅有分组排序号,还有中间变量tmp。此步骤中主要对tmp过滤并筛选我们需要的topN,本例采用top3。

SELECT province_name,city_name,gdp,new_rank as rank from 

(SELECT province_name,city_name,gdp,

IF(@tmp=province_name,@rank:=@rank + 1,@rank:=1) as new_rank,

@tmp:=province_name as tmp FROM 

`2016_GDP` a

ORDER BY province_name,gdp DESC) b

where new_rank <= 3;

最终结果如下。

MySQL中利用简单SQL实现开窗函数的分组排序功能

  • 阅读量:145
  • 阅读量:75
  • 阅读量:128
  • 阅读量:76
  • 阅读量:83
  • 热门搜索
    贵阳 旅游 峨眉山旅游路线 张家界旅游报价 东南亚旅游价格 下川岛旅游 过年云南旅游 黑龙江旅游攻略 暑假旅游好去处 广州的旅游景点 大陈岛旅游