0

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

4

1 回答 1

1

您可以使用分析来做到这一点。假设分数在上升(分数越高越好):

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
于 2012-11-30T14:53:27.580 回答