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排序,为每一行分配了一个序号而已。
------解决方案--------------------
楼上正解,要分组还是要在 where子句后加 group by才可以