oracle数据库的分析函数ROW_NUMBER() OVER的基本用法

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2)
该语法的意思是根据COLUMN1分组,在分组内部根据 COLUMN2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
背景:

  1. 今天主要在处理Oracle数据库表中重复数据,想到了使用该分析函数进行数据的处理
    示例如下图所示:(我的案例主要是以纬度分组)
    在这里插入图片描述
    实例:
    初始化数据
CREATE TABLE TEMP_LON_LAT (
	lAT VARCHAR2(15),
	LON VARCHAR2(15),
	PROVINCE NUMBER(8),
	ID NUMBER(8)
)

数据显示为:
在这里插入图片描述
SQL脚本如下所示:

SELECT LAT,LON,PROVINCE,ID,num
FROM (
  SELECT a.*, row_number() OVER (PARTITION BY a.lat ORDER BY a.PROVINCE ASC ) AS num
  FROM TEMP_LON_LAT a
)

备注:
PROVINCE_ID、CITY_ID、REGION_ID数据为空分析过程:
原因:
1.导入的数据含有重复数据,所以造成excel有一部分数据三个字段为空
分析过程:
当我通过使用sql语句st_contaions()函数进行匹配坐标点是否被包含于pr_area表中的shape.points(面)中(也就是我们所说的点是否在多边形中)
有的数据匹配的结果为1,证明被匹配上
所以我通过函数进行加PROVINCE_ID,进而通过省份标识来加CITY_ID、REGION_ID
通过ID字段查询表,发现该条数据的三个字段已经被加上
最后通过经纬度在excel文件中进行筛选,发现同一坐标点的数据含有多条,最终导致的结果就是有一些重复数据为空。

发布了23 篇原创文章 · 获赞 15 · 访问量 6272

猜你喜欢

转载自blog.csdn.net/xiaoleilei666/article/details/104413782