⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 分组的top n查询(高).txt

📁 oracle问题集
💻 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 &copy; Jelsoft Enterprises Limited 2000, 2001.
Copyright by itpub.net 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -