簡體   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