请帮忙解释一下COUNT(*) OVER (PARTITION BY)和ROW_NUMBER() OVER

时间:2022-09-03 15:30:19
谢谢了,非常感谢。网上搜索了,但是没有好的解释

6 个解决方案

#1


有什么不明白的?这些都是Oracle分析函数的功能,具体参考: http://wenku.baidu.com/view/6694a7225901020207409c5d.html

#2


引用楼主 yinhe036 的回复:
谢谢了,非常感谢。网上搜索了,但是没有好的解释

分析函数
COUNT(*) OVER (PARTITION BY id)

====
select id,count(*) from tb group by id




ROW_NUMBER() OVER
==
id col  ROW_NUMBER() OVER(order by id)
1  2       1
1  3       2
2 1        3
2 2         4   
3 3         5


id col  ROW_NUMBER() OVER( partition by id order by col)
1  2       1
1  3       2
2 1        1
2 2         2  
3 3         1

#3


--在部门内新水排名(如果有相同名次,用dense_rank)
SELECT row_number() over
(PARTITION BY t.deptno  --按部门分组
ORDER BY t.sal) rn, --部门内按薪水排序
 t.sal, t.ename, t.deptno 
  FROM emp t;

--分组累计计数,注意相同sal情况
SELECT COUNT(*) over(PARTITION BY t.deptno ORDER BY sal) cn, t.sal, t.ename, t.deptno 
FROM emp t;

#4


COUNT(*) OVER (PARTITION BY id)

1 2 2
1 3 2
2 1 2
2 2 2   
3 3 1

引用 2 楼 wkc168 的回复:
引用楼主 yinhe036 的回复:
谢谢了,非常感谢。网上搜索了,但是没有好的解释

分析函数
COUNT(*) OVER (PARTITION BY id)

====
select id,count(*) from tb group by id




ROW_NUMBER() OVER
==
id col ROW_NUMBER() OVER(order by i……

#5


自己动手丰衣足食,我也是菜鸟

#6



--分析函数:
count(a) over (partition by b order by c)
--上面的count()就是一个分析函数;over可以理解为一个关键字或者标识,有over就表示它前面的函数
--是一个分析函数,否则就是普通的求和函数了;
--()中的partition by是指定分区,或者理解为分组
--()中的order by是指定该分区内的数据的顺序

#1


有什么不明白的?这些都是Oracle分析函数的功能,具体参考: http://wenku.baidu.com/view/6694a7225901020207409c5d.html

#2


引用楼主 yinhe036 的回复:
谢谢了,非常感谢。网上搜索了,但是没有好的解释

分析函数
COUNT(*) OVER (PARTITION BY id)

====
select id,count(*) from tb group by id




ROW_NUMBER() OVER
==
id col  ROW_NUMBER() OVER(order by id)
1  2       1
1  3       2
2 1        3
2 2         4   
3 3         5


id col  ROW_NUMBER() OVER( partition by id order by col)
1  2       1
1  3       2
2 1        1
2 2         2  
3 3         1

#3


--在部门内新水排名(如果有相同名次,用dense_rank)
SELECT row_number() over
(PARTITION BY t.deptno  --按部门分组
ORDER BY t.sal) rn, --部门内按薪水排序
 t.sal, t.ename, t.deptno 
  FROM emp t;

--分组累计计数,注意相同sal情况
SELECT COUNT(*) over(PARTITION BY t.deptno ORDER BY sal) cn, t.sal, t.ename, t.deptno 
FROM emp t;

#4


COUNT(*) OVER (PARTITION BY id)

1 2 2
1 3 2
2 1 2
2 2 2   
3 3 1

引用 2 楼 wkc168 的回复:
引用楼主 yinhe036 的回复:
谢谢了,非常感谢。网上搜索了,但是没有好的解释

分析函数
COUNT(*) OVER (PARTITION BY id)

====
select id,count(*) from tb group by id




ROW_NUMBER() OVER
==
id col ROW_NUMBER() OVER(order by i……

#5


自己动手丰衣足食,我也是菜鸟

#6



--分析函数:
count(a) over (partition by b order by c)
--上面的count()就是一个分析函数;over可以理解为一个关键字或者标识,有over就表示它前面的函数
--是一个分析函数,否则就是普通的求和函数了;
--()中的partition by是指定分区,或者理解为分组
--()中的order by是指定该分区内的数据的顺序