У меня есть часть кода, которая возвращает 90-й процентиль группы данных, и я пытаюсь изменить код, чтобы вернуть другие процентили (25, 50, 75). Вот код, который возвращает 90-й процентиль (без интерполяции) успешно:Возвращение множества процентилей в SQL
SELECT Max ([Subquery]![RECP]) AS RECP90P
FROM (SELECT TOP 90 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
Мое мышление является то, что если я изменить код к следующему, я смог бы вернуть 25-процентиль, например. Вот что я пытался:
SELECT Min ([Subquery]![RECP]) AS RECP25P
FROM (SELECT TOP 75 PERCENT [RECP] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
Я знаю, что не существует в SQL нет SELECT BOTTOM
поэтому я пытался вернуть обратное с помощью MIN
. Однако, когда я пытаюсь запустить этот код, я возвращаю пустое значение. Я попытался изменить DESC
на ASC
, думая, что возможно MIN
возвращает значение, а не минимум всех значений, но даже это возвращает пустое значение. Кто-нибудь может объяснить, где я ошибаюсь?
Будет что-то вроде этой работы вместо этого?
SELECT Max([CompData Query]![AgedSalary]) CASE ([CompData Query]![Code]) WHEN "RECP" AS RECP90P
FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [RECP] DESC) AS Subquery;
ли вы быть в состоянии объяснить, почему это CASE WHEN
неправильно и/или отсутствует в `Оператор ':
SELECT CASE ([CompData Query]![Code]) WHEN "RECP" THEN SELECT Max([CompData Query]![AgedSalary]) AS RECP90P FROM (SELECT TOP 90 PERCENT [AgedSalary] FROM [CompData Query] ORDER BY [AgedSalary] DESC) ELSE 'Unknown' END;
Спасибо.
'RECP' имеет пустые значения в столбце. Вот почему вы получаете их с помощью 'MIN()'. –
Вы знаете, как исключить пустые значения в выражении? – Chris2015
Я думаю, мне, вероятно, нужно использовать CASE WHEN в SQL, чтобы исключить пробелы – Chris2015