在查找前几个或最多的观察值时使用 TOP 或 Rank
Use TOP or Rank when finding the first few or the most observations
我搜索了其他人的代码并尝试针对我的情况进行自定义,
但似乎当问题是 "max" 时,它就起作用了。
当要找到前 100 名时,它不起作用。
我正在努力让公司雇用前 100 名员工。
我首先尝试了 TOP(100),然后尝试了 RANK(),我想它们都可以。
虽然我对语法不是很熟悉。
我想知道是否有人可以向我提供有关我的代码的任何建议?
非常感谢!
SELECT d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
from Dtable_department d join
Etable_employee e
on e.department_id = d.department_id
where hire_date = (select DENSE_RANK() OVER (PARTITION BY e.hire_date ORDER BY hire_date DESC) AS E_RANK_hire WHERE rownum=100))
Group BY E_RANK_hire
order by E_RANK_hire
获得公司雇用的前 100 人
首先,请注意以下两个查询的结果中都包含相同的情况。例如即使您有雇员的雇用日期相同,他们也会包含在列表中,这意味着列表至少有 100 人。
如果您的数据库版本是 12c-
,那么您需要使用一个子查询,其中 return dense_rank()
函数的结果:
select department_name, department_id, first_name, hire_date, salary
from
(
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary,
dense_rank() over ( order by hire_date ) as e_rank_hire
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
)
where e_rank_hire <= 100
order by e_rank_hire;
如果你的数据库版本是12c+
,那么你不需要使用子查询fetch
子句:
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
order by hire_date
fetch first 100 rows with ties;
请注意您的案例使用 partition by
子句是错误的,应在 dense_rank()
函数的表达式中删除,并且雇用日期的顺序不应降序而是升序。
我搜索了其他人的代码并尝试针对我的情况进行自定义, 但似乎当问题是 "max" 时,它就起作用了。 当要找到前 100 名时,它不起作用。 我正在努力让公司雇用前 100 名员工。 我首先尝试了 TOP(100),然后尝试了 RANK(),我想它们都可以。 虽然我对语法不是很熟悉。 我想知道是否有人可以向我提供有关我的代码的任何建议?
非常感谢!
SELECT d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
from Dtable_department d join
Etable_employee e
on e.department_id = d.department_id
where hire_date = (select DENSE_RANK() OVER (PARTITION BY e.hire_date ORDER BY hire_date DESC) AS E_RANK_hire WHERE rownum=100))
Group BY E_RANK_hire
order by E_RANK_hire
获得公司雇用的前 100 人
首先,请注意以下两个查询的结果中都包含相同的情况。例如即使您有雇员的雇用日期相同,他们也会包含在列表中,这意味着列表至少有 100 人。
如果您的数据库版本是 12c-
,那么您需要使用一个子查询,其中 return dense_rank()
函数的结果:
select department_name, department_id, first_name, hire_date, salary
from
(
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary,
dense_rank() over ( order by hire_date ) as e_rank_hire
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
)
where e_rank_hire <= 100
order by e_rank_hire;
如果你的数据库版本是12c+
,那么你不需要使用子查询fetch
子句:
select d.department_name, d.department_id, e.first_name, e.hire_date, e.salary
from Dtable_department d
join Etable_employee e
on e.department_id = d.department_id
order by hire_date
fetch first 100 rows with ties;
请注意您的案例使用 partition by
子句是错误的,应在 dense_rank()
函数的表达式中删除,并且雇用日期的顺序不应降序而是升序。