2012-11-30 38 views

回答

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%(包括重複分數)中的那些,請用rank()替換row_number()

您也可以使用NTILE功能:

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

文森特 - 真棒!我想包括所有那些在前10%,所以我會使用rank() – Ram

相關問題