【发布时间】:2015-03-30 14:26:01
【问题描述】:
我正在尝试查询前 N 行,但在 OracleSQL 内部有一个组
例如:
+-----+----------+----+------+
|JobID|JobTitle |Pay |Name |
+-----+----------+----+------+
|012 |Manager |400 |Bob |
|012 |Manager |400 |Gemma |
|012 |Manager |400 |Ash |
|020 |Supervisor|400 |Dan |
|020 |Supervisor|400 |Hannah|
|013 |Clerk |300 |Sarah |
+-----+----------+----+------+
从上面的示例中,我想找到一个职位下的所有员工,然后只显示前 3 个最高薪的职位,然后按首付排序。
+-----+----------+----+------+
|JobID|JobTitle |Pay |Name |
+-----+----------+----+------+
|02 |Manager |400 |Bob |
|02 |Manager |400 |Gemma |
|02 |Manager |400 |Ash |
|04 |Supervisor|400 |Dan |
|04 |Supervisor|400 |Hannah|
|03 |Clerk |300 |Sarah |
|01 |Cleaner |200 |Scruff|
|01 |Cleaner |200 |Fry |
+-----+----------+----+------+
应该是桌子。
我尝试使用子查询,然后添加 rownum
SELECT * FROM
( SELECT JobID, MAX(Pay) AS Pay, JobTitle, EmpID, Name
FROM Employees,Jobs
WHERE JobID = Employees.Job_ID
GROUP BY JobID, Pay, EmpID, JobTitle,
ORDER BY Pay DESC)
WHERE ROWNUM <= 3;
【问题讨论】:
标签: sql oracle greatest-n-per-group