6 个解决方案
#2
分析函数
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
1 2 2
1 3 2
2 1 2
2 2 2
3 3 1
#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
分析函数
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
1 2 2
1 3 2
2 1 2
2 2 2
3 3 1
#5
自己动手丰衣足食,我也是菜鸟
#6
--分析函数:
count(a) over (partition by b order by c)
--上面的count()就是一个分析函数;over可以理解为一个关键字或者标识,有over就表示它前面的函数
--是一个分析函数,否则就是普通的求和函数了;
--()中的partition by是指定分区,或者理解为分组
--()中的order by是指定该分区内的数据的顺序