用于从EMPLOYEES表中查找前10名和至少10名受薪员工的oracle sql命令

用于从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

我喜欢找出前十名和最少十名员工的工资。输出应同时显示前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 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