根据得分列获取前10%的记录

时间:2012-11-30 14:50:28

标签: oracle top-n

我有一个SCORE专栏。如何从EMPLOYEE表中选择前10%的最高分?

1 个答案:

答案 0 :(得分:1)

您可以使用analytics执行此操作。假设分数上升(分数越高越好):

SELECT e.*
  FROM (SELECT e.*,
               row_number() OVER (ORDER BY score DESC)
               / COUNT(*) OVER () pct
          FROM employee e) e
 WHERE pct <= 0.1

这将最多选择10%的员工。如果它们之间的分数相等,则上述SQL将以非确定性方式在其中进行选择。如果您想要包含排名前10%的所有内容(包括重复分数),请将row_number()替换为rank()

您还可以使用NTILE功能:

SELECT e.*
  FROM (SELECT e.*,
               ntile(10) OVER (order by score DESC) ntile#
          FROM employee e) e
 WHERE ntile# = 1