SQL: найти процентили - PullRequest
       6

SQL: найти процентили

5 голосов
/ 11 сентября 2009

У меня есть таблица, в которой есть определенный числовой столбец с именем Score. Я хотел бы выполнить запрос к этой таблице, чей результат будет иметь 100 строк, каждая из которых представляет счет, соответствующий этому процентилю. Например, результат может выглядеть следующим образом:

 Percentile | Score
---------------------
 01         | 10
 02         | 12
 03         | 12
 04         | 17
 ...        | ...
 99         | 1684
 100        | 1685

Значения показателей в приведенной выше таблице результатов являются фактическими значениями показателей, которые существуют в исходной таблице и не интерполируются. Интерполированный результат будет лучше, но это не является обязательным требованием.

Может быть несколько эвристик, которые могут привести к такому результату. То, что я использую сегодня (в коде), в основном так: значение Score, соответствующее процентилю, будет значением оценки, для которого: число строк с меньшими значениями, деленное на общее количество строк, округленное до целого , равно процентилю (надеюсь, понятно)

Я могу рассмотреть другие эвристики, если их проще реализовать

Я работаю в MS-SQL, но был бы признателен за решение, которое также работает на MySQL.

Какой лучший способ добиться этого?

1 Ответ

5 голосов
/ 11 сентября 2009

В SQL Server:

SELECT  percentile, score
FROM    (
        SELECT  ROW_NUMBER() OVER (PARTITION BY percentile ORDER BY score) AS rn, percentile, score
        FROM    (
                SELECT  score, NTILE(100) OVER (ORDER BY score) AS percentile
                FROM    mytable
                ) q
        ) q2
WHERE   rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...