Я застрял несколько часов назад вокруг чего-то подобного и разработал менее грязный код для вывода 25-го, 50-го, 75-го процентилей в одном запросе Teradata. Может быть дополнительно расширена для получения «5-точечная сводка». Для минимального и максимального изменения статических значений в соответствии с вашей оценкой населения.Как вывести различные 25, 50, 75 процентилей в один запрос Teradata?
Где-то кто-то попросил об элегантном подходе. Совместное использование мин.
Вот код:
SELECT MAX(PER_MIN) AS PER_MIN,
MAX(PER_25) AS PER_25,
MAX(PER_50) AS PER_50,
MAX(PER_75) AS PER_75,
MAX(PER_MAX) AS PER_MAX
FROM (SELECT CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.01 AS INT) THEN DURATION_MACRO_CURR END AS PER_MIN,
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.25 AS INT) THEN DURATION_MACRO_CURR END AS PER_25,
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.50 AS INT) THEN DURATION_MACRO_CURR END AS PER_50
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.75 AS INT) THEN DURATION_MACRO_CURR END AS PER_75
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.99 AS INT) THEN DURATION_MACRO_CURR END AS PER_MAX
FROM PROD_EXP_DL_CVM.PROD_CVM
WHERE PW_END_DATE = '2016-10-18'
) BASE
Вот желаемый результат:
спасибо Гордон для входа. Позвольте мне попробовать это и проверить. –
Эй Гордан. Вы легенда. Да это сработало :). Я бы сказал, что ваш код более чистый и понятный. Спасибо. –