当前位置: 代码迷 >> Oracle管理 >> ROW_NUMBER()OVER()函数,该如何处理
  详细解决方案

ROW_NUMBER()OVER()函数,该如何处理

热度:659   发布时间:2016-04-24 04:15:29.0
ROW_NUMBER()OVER()函数
select  deptno,ename,sal, ROW_NUMBER()OVER(PARTITION BY deptno ORDER BY sal) from emp;
这条语句一执行结果集中为什么会有两条完全一样的记录
DEPTNO     ENAME     SAL
10                  SMITH      500
10                   SMITH      500
上面两条记录应该要被分到一个组里面啊,为什么出现两条完全一样的记录
------解决方案--------------------
分析函数不等于group by
ROW_NUMBER只是增加了一列查询结果,而不会对结果进行合并或是筛选
你没加where条件的情况下,肯定是把全表所有的数据都查询出来的
你的结果应该是少些了一列,前面是一致的,row_number这一列取值应该是不同的
10                  SMITH      500   1
10                  SMITH      500   2
------解决方案--------------------
LZ 2# 3# 什么意思? 

你要的结果,如果想出现 1 条记录的话,必须在 from emp 后加上 group by 语句。
------解决方案--------------------
查询基础表看看数据是什么情况,应该是基础数据的问题
------解决方案--------------------
基础数据问题,row_number() over()不会根据你的partition by分组而合并,此处的partition by值影像你row_number的分组。
------解决方案--------------------
开窗函数不是聚合函数,不会减少原来数据的行数,这里你的数据肯定是存在重复的情况。
ROW_NUMBER()OVER(PARTITION BY deptno ORDER BY sal) 只是按照deptno分组,并按照sal排序,为每一行分配了一个序号而已。
------解决方案--------------------
引用:
开窗函数不是聚合函数,不会减少原来数据的行数,这里你的数据肯定是存在重复的情况。
ROW_NUMBER()OVER(PARTITION BY deptno ORDER BY sal) 只是按照deptno分组,并按照sal排序,为每一行分配了一个序号而已。


楼上正解,要分组还是要在 where子句后加 group by才可以
  相关解决方案