0
我有一個分數列。如何從EMPLOYEE表中選出最高分數的前10%?根據分數列獲取記錄的前10%
我有一個分數列。如何從EMPLOYEE表中選出最高分數的前10%?根據分數列獲取記錄的前10%
您可以用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
文森特 - 真棒!我想包括所有那些在前10%,所以我會使用rank() – Ram