我如何才能获得N个针对几个小组的结果
一个oracle查询。

例如,给定下表:

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


有更多行和更多职业。我想得到
每个职业有三名员工(可以说)。

有没有一种方法可以不使用子查询?

最佳答案

这将产生所需的内容,并且不使用供应商特定的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最低的值。您可以更改不等式比较中使用的属性,以使其按名称或其他方式赋予高层雇员。

关于sql - 获得每个组的最佳结果(在Oracle中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/134958/

10-13 04:17