我有一个 SCORE 列。如何从 EMPLOYEE 表中选择得分最高的前 10%?
问问题
223 次
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 回答