繁体   English   中英

如何 select 在 Oracle SQL 中按顺序排列中间 80% 行(顶部 % 不起作用)

[英]How to select middle 80% rows in Oracle SQL with order by (top % is not working)

我尝试了 top % 但这在 Oracle SQL 中不起作用。 Offset 和 fetch next 正在工作,但我无法给出百分比。

获取中间 80% 行的最佳方法是什么?

任何帮助将不胜感激,谢谢!

中间 80% ? 那是在 10% 到 90% 之间? 让我们假设它是。

样本数据(Scott 的EMP表),按薪水排序:

SQL> select ename, job, sal,
  2    rank() over (order by sal) rnk
  3  from emp order by sal;

ENAME      JOB              SAL        RNK
---------- --------- ---------- ----------
SMITH      CLERK            800          1
JAMES      CLERK            950          2
ADAMS      CLERK           1100          3
WARD       SALESMAN        1250          4
MARTIN     SALESMAN        1250          4
MILLER     CLERK           1300          6
TURNER     SALESMAN        1500          7
ALLEN      SALESMAN        1600          8
CLARK      MANAGER         2450          9
BLAKE      MANAGER         2850         10
JONES      MANAGER         2975         11
SCOTT      ANALYST         3000         12
FORD       ANALYST         3000         12
KING       PRESIDENT       5000         14

14 rows selected.

CTE根据员工的薪水对员工进行排名; 最后的where子句为那些属于“中间”80%( pct列)的人返回行。

SQL> with temp as
  2    (select ename, job, sal,
  3       rank() over (order by sal) rnk,        -- rank rows by salary
  4       count(*) over (order by null) cnt      -- total number of rows
  5     from emp
  6    )
  7  select t.*,
  8    round(rnk / cnt * 100) pct                -- percentage
  9  from temp t
 10  where round(rnk / cnt * 100) between 10 and 90;

ENAME      JOB              SAL        RNK        CNT        PCT
---------- --------- ---------- ---------- ---------- ----------
JAMES      CLERK            950          2         14         14
ADAMS      CLERK           1100          3         14         21
WARD       SALESMAN        1250          4         14         29
MARTIN     SALESMAN        1250          4         14         29
MILLER     CLERK           1300          6         14         43
TURNER     SALESMAN        1500          7         14         50
ALLEN      SALESMAN        1600          8         14         57
CLARK      MANAGER         2450          9         14         64
BLAKE      MANAGER         2850         10         14         71
JONES      MANAGER         2975         11         14         79
SCOTT      ANALYST         3000         12         14         86
FORD       ANALYST         3000         12         14         86

12 rows selected.

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM