我有一个SCORE专栏。如何从EMPLOYEE表中选择前10%的最高分?
答案 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