Я пытаюсь вычислить N-й процентиль всех значений в одном столбце таблицы.Все, что я хочу, - это скалярное агрегированное значение, для которого N процентов значений ниже.Например, если в таблице 100 строк, значение которых совпадает с индексом строки, плюс один (от 1 до 100 последовательно), то я бы хотел, чтобы это значение сообщало мне, что 95% значений ниже 95.
Аналитическая функция PERCENTILE_CONT выглядит ближе всего к тому, что я хочу.Но если я попытаюсь использовать его следующим образом:
SELECT PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY ValueColumn) OVER () AS P95
Я получу по одной строке на строку в таблице, все с одинаковым значением.Я мог бы использовать TOP 1
, чтобы просто дать мне одну из этих строк, но теперь я сделал дополнительное сканирование таблицы.
Я не пытаюсь создать таблицу результатов wizbang, разделенную некоторым другим столбцом воригинальный стол.Я просто хочу, чтобы агрегатное скалярное значение.
Edit: I смог использовать PERCENTILE_CONT
в запросе с предложением WHERE
.Например:
DECLARE @P95 INT
SELECT TOP 1 @P95 = (PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY ValueColumn) OVER ())
FROM ExampleTable
WHERE LOWER(Color) = 'blue'
SELECT @P95
Включение предложения WHERE
дает другой результат, чем я получил без него.