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 に答える