用于从EMPLOYEES表中查找前10名和至少10名受薪员工的oracle sql命令
我喜欢找出前十名和最少十名员工的工资。输出应同时显示前10名和至少10名受薪员工 我在一个sql命令中找到了前10名薪资员工,在另一个sql命令中找到了至少10名薪资员工。如何将它们结合起来用于从EMPLOYEES表中查找前10名和至少10名受薪员工的oracle sql命令,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我喜欢找出前十名和最少十名员工的工资。输出应同时显示前10名和至少10名受薪员工 我在一个sql命令中找到了前10名薪资员工,在另一个sql命令中找到了至少10名薪资员工。如何将它们结合起来 SELECT *FROM ( SELECT *FROM emp ORDER BY Salary desc ) WHERE rownum <= 10 ORDER BY Salary ; 及 产出应为20人提供10个最高和10个最低的组合使用联合所有 使用union
SELECT *FROM
(
SELECT *FROM emp
ORDER BY Salary desc
)
WHERE rownum <= 10
ORDER BY Salary ;
及
产出应为20人提供10个最高和10个最低的组合使用联合所有
使用union all
一种方法结合一切。另一个使用窗口功能,我更喜欢:
SELECT e.*
FROM (SELECT e.*,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum_desc,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum_asc
FROM emp e
) e
WHERE seqnum_desc <= 10 or seqnum_asc <= 10
ORDER BY Salary ;
注意:如果有连接,这将从每组中任意选择10行。如果您希望在平局中使用所有行,则使用秩而不是行号。一种方法union all。另一个使用窗口功能,我更喜欢:
SELECT e.*
FROM (SELECT e.*,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum_desc,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum_asc
FROM emp e
) e
WHERE seqnum_desc <= 10 or seqnum_asc <= 10
ORDER BY Salary ;
注意:如果有连接,这将从每组中任意选择10行。如果您希望在平局中使用所有行,则使用秩而不是行号。使用带行号的union all
将union all与行编号一起使用
这是您的或的副本。请花点时间搜索重复项,如果发现任何问题,请关闭该问题。这是您的或的副本。请花时间搜索重复项,如果发现任何问题,请关闭该问题。这在分析函数中缺少按关键字排序。它也是一个副本;请花时间搜索重复项,如果发现任何问题,请投票关闭该问题。分析函数中缺少按关键字排序。它也是一个副本;请花时间搜索重复项,如果发现任何问题,请投票结束该问题。这是或的重复项。请花点时间搜索重复项,如果发现任何问题,请投票结束该问题。是的,从下一次开始我将@mt0这是or的重复项。请花点时间搜索重复项,如果发现任何问题,请投票结束该问题。是的,从下一次开始我将@MT0
SELECT e.*
FROM (SELECT e.*,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum_desc,
ROW_NUMBER() OVER (ORDER BY Salary DESC) as seqnum_asc
FROM emp e
) e
WHERE seqnum_desc <= 10 or seqnum_asc <= 10
ORDER BY Salary ;
SELECT a.* FROM
(
SELECT *,row_number() over(order by Salary desc) rn FROM emp
) a
WHERE rn <= 10
union all
SELECT b.* FROM
(
SELECT *,row_number() over(order by Salary asc) rn FROM emp
) b
WHERE rn <= 10