У меня есть довольно широкая таблица больших запросов с ~ 20-30 различными столбцами, каждый из которых должен получить дополнительный столбец процентиль , который показывает значение процентиля столбца по сравнению со всеми другими строками в таблице. Однако каждый из столбцов должен только получить значение процентиля , если значение в другом столбце соответствует определенному порогу. Чтобы продемонстрировать это, я создал воспроизводимый пример ниже:
WITH
correct_games_played AS
(
SELECT "a" as name, 7 as num1, 0.4 as num2, 0.55 as num3
UNION ALL SELECT "b" as name, 13 as num1, 0.53 as num2, 0.37 as num3
UNION ALL SELECT "c" as name, 4 as num1, 0.42 as num2, 0.32 as num3
UNION ALL SELECT "d" as name, 17 as num1, 0.6 as num2, 0.23 as num3
UNION ALL SELECT "e" as name, 7 as num1, 0.3 as num2, 0.25 as num3
UNION ALL SELECT "f" as name, 16 as num1, 0.7 as num2, 0.43 as num3
UNION ALL SELECT "g" as name, 10 as num1, 0.53 as num2, 0.52 as num3
UNION ALL SELECT "h" as name, 5 as num1, 0.54 as num2, 0.21 as num3
UNION ALL SELECT "i" as name, 9 as num1, 0.56 as num2, 0.17 as num3
UNION ALL SELECT "j" as name, 3 as num1, 0.75 as num2, 0.53 as num3
)
SELECT
a.*,
-- RANK() OVER(ORDER BY a.num1 DESC) AS num1_rank,
-- RANK() OVER(ORDER BY a.num2 DESC) AS num2_rank,
-- RANK() OVER(ORDER BY a.num3 DESC) AS num3_rank
RANK() OVER(ORDER BY a.num1 DESC) AS num1_rank,
RANK() OVER(ORDER BY a.num2 WHERE a.num1 > 4 DESC) AS num2_rank
RANK() OVER(ORDER BY a.num3 WHERE a.num1 > 3 DESC) AS num3_rank
FROM correct_games_played as a
Этот скрипт выдает ошибку Syntax error: Expected ")" but got keyword WHERE at [22:37]
, однако это работает, если я заменю rank()
на закомментированный rank()
. Моя цель на самом деле очень проста:
num2_rank
: только значения ранга в a.num2
, если a.num1
больше 4, в противном случае выведите null
значение num3_rank
: только значения ранга в a.num3
, если a.num1
больше 3, в противном случае выведите значение null
Моя таблица достаточно широка, и есть вероятность, что для каждого столбца потребуетсясвое собственное условие, чтобы определить, следует ли ранжировать значения строки каждого столбца или нет. Любая помощь с этим будет принята с благодарностью, спасибо!