当前位置:  开发笔记 > 前端 > 正文

获得每个组的最佳结果(在Oracle中)

如何解决《获得每个组的最佳结果(在Oracle中)》经验,为你挑选了2个好方法。

如何在oracle查询中获得几个组的N个结果.

例如,给出下表:

|--------+------------+------------|
| emp_id | name       | occupation |
|--------+------------+------------|
|      1 | John Smith | Accountant |
|      2 | Jane Doe   | Engineer   |
|      3 | Jack Black | Funnyman   |
|--------+------------+------------|

还有更多行占用更多.我想从每个职业中找到三名员工(比方说).

有没有办法在不使用子查询的情况下执行此操作?



1> jop..:

我现在没有方便的oracle实例所以我没有测试过这个:

select *
from (select emp_id, name, occupation,
      rank() over ( partition by occupation order by emp_id) rank
      from employee)
where rank <= 3

以下是关于排名如何运作的链接:http://www.psoug.org/reference/rank.html


他没有指定子查询吗?

2> Bill Karwin..:

这产生了你想要的东西,它没有使用特定于供应商的SQL功能,如TOP N或RANK().

SELECT MAX(e.name) AS name, MAX(e.occupation) AS occupation 
FROM emp e 
  LEFT OUTER JOIN emp e2 
    ON (e.occupation = e2.occupation AND e.emp_id <= e2.emp_id) 
GROUP BY e.emp_id 
HAVING COUNT(*) <= 3 
ORDER BY occupation;

在此示例中,它为三个员工提供每个职业的最低emp_id值.您可以更改不等式比较中使用的属性,使其按名称或其他方式为最高员工提供.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有