📄 分组的top n查询(高).txt
字号:
ITPUB论坛 - 分组的top N查询
ITPUB论坛 (http://www.itpub.net/index.php)
- Oracle开发 (http://www.itpub.net/forumdisplay.php?forumid=3)
-- 分组的top N查询 (http://www.itpub.net/showthread.php?threadid=74602)
由 gengmao 于 02-11-17 21:02 发表:
分组的top N查询
我有一个查询,希望得到分组的top N查询结果。
例如,如何查询emp表中每个部门薪水最高的2个雇员?
我想知道用分析函数和不用分析函数的方法。谢谢!
__________________
You can observe a lot by watching.
由 biti_rainy 于 02-11-17 21:35 发表:
816版本的分组函数
select * from
(select ...,row_number() over(partition by dept order by salary) rnum )
where rnum < 3;
2个,如果同时最高的人超过2个怎么取?
第一高的只有一个但第二高的薪水有超过2人的怎么取
请查阅 rank() over() /等
不用分析函数恐怕只有构造集合用表连接
麻烦
__________________
I love oracle
But i hate IT
oracle文档
http://tahiti.oracle.com/pls/tahiti/tahiti.homepage?remark=tahiti
由 gengmao 于 02-11-17 23:24 发表:
rank() over()是我要的,谢谢biti_rainy。
我仍然想知道在没有分析函数的情况下,如何写这样的查询。我没想出来
__________________
You can observe a lot by watching.
由 oldwain 于 02-11-18 01:30 发表:
下面的方法来自asktom.
SQL> select * from t;
DEPTNO SAL
---------- ----------
10 100
10 100
10 200
10 300
10 400
10 500
20 100
20 200
20 300
20 400
20 500
20 600
20 700
20 700
30 100
30 200
30 300
30 400
18 rows selected.
-- ORACLE 8.1.5
SQL> select distinct *
2 from t t1
3 where 5 >= ( select count(distinct t2.sal)
4 from t t2
5 where t2.deptno = t1.deptno
6 and t2.sal >= t1.sal )
7 /
DEPTNO SAL
---------- ----------
10 100
10 200
10 300
10 400
10 500
20 300
20 400
20 500
20 600
20 700
30 100
30 200
30 300
30 400
14 rows selected.
__________________
原 ▇▇▇▇▇▇▇
装 ▇ITPUB▇
▇狂热☆分子▇
正 ▇灌水专用章▇
版 ▇▇▇▇▇▇▇
下 载 I T P U B 电 子 杂 志
由 biti_rainy 于 02-11-18 01:58 发表:
哎呀
这个句子我都保存有例子的
可我居然忘了
因为都是看见过而没有实际用过 ,faint
__________________
I love oracle
But i hate IT
oracle文档
http://tahiti.oracle.com/pls/tahiti/tahiti.homepage?remark=tahiti
由 biti_rainy 于 02-11-18 02:02 发表:
不过,归根揭底
都是表连接构造集合
不过tom使用的比较巧妙
__________________
I love oracle
But i hate IT
oracle文档
http://tahiti.oracle.com/pls/tahiti/tahiti.homepage?remark=tahiti
由 gengmao 于 02-11-18 04:13 发表:
谢谢两位。
表连接的方法很巧妙
——尽管效率差了很多
__________________
You can observe a lot by watching.
由 lander 于 02-11-18 06:54 发表:
816版本以上的分析函数
select * from
(select ...,row_number() over (partition by dept order by salary desc nulls
last) rn )
where rn < 3;
__________________
==探索Oracle,探索奥秘==
所有时间均为 +8 hours . 现在时间是 16:34.
Powered by: vBulletin Version 2.0.1
Translated and hacked by:Ztbbs.
Copyright © Jelsoft Enterprises Limited 2000, 2001.
Copyright by itpub.net
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -