猿问

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

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

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


例如,给出下表:


|--------+------------+------------|

| emp_id | name       | occupation |

|--------+------------+------------|

|      1 | John Smith | Accountant |

|      2 | Jane Doe   | Engineer   |

|      3 | Jack Black | Funnyman   |

|--------+------------+------------|

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


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


qq_遁去的一_1
浏览 600回答 3
3回答

慕姐8265434

这产生了你想要的东西,它没有使用特定于供应商的SQL功能,如TOP N或RANK()。SELECT&nbsp;MAX(e.name)&nbsp;AS&nbsp;name,&nbsp;MAX(e.occupation)&nbsp;AS&nbsp;occupation&nbsp; FROM&nbsp;emp&nbsp;e&nbsp; &nbsp;&nbsp;LEFT&nbsp;OUTER&nbsp;JOIN&nbsp;emp&nbsp;e2&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ON&nbsp;(e.occupation&nbsp;=&nbsp;e2.occupation&nbsp;AND&nbsp;e.emp_id&nbsp;<=&nbsp;e2.emp_id)&nbsp;GROUP&nbsp;BY&nbsp;e.emp_id&nbsp; HAVING&nbsp;COUNT(*)&nbsp;<=&nbsp;3&nbsp;ORDER&nbsp;BY&nbsp;occupation;在此示例中,它为三个员工提供每个职业的最低emp_id值。您可以更改不等式比较中使用的属性,使其按名称或其他方式为最高员工提供。
随时随地看视频慕课网APP
我要回答