Как я могу использовать результат из другого столбца в запросе улья? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть этот запрос, который вычисляет p-значение, но затем я хочу использовать его повторно, чтобы получить значение.Я не уверен, могу ли я повторно использовать эти данные или мне нужно скопировать эту часть.

Вот мой запрос

  CASE WHEN value1 > 1
  AND 1.0 - IF(
    p_value1 IS NULL,
    1.0,
    p_value1
  ) >= 0.8 THEN p_value1 WHEN value1 <= 1
  AND 1.0 - IF(
    p_value2 [1.03] is NULL,
    1.0,
    p_value2 [1.03]
  ) >= 0.8 THEN p_value2 [1.03] END AS p_value, 
  ...
  FROM table1
  WHERE dt = '2018-01-01'

Что он делает, это проверяет, если значение1 больше 1 и значение p_value1 больше 0,8, затем выведите p_value2, в противном случае, если значение1 меньше 1, получитезначение из p_value2 [1.03] и выведите его как p_value.

Теперь следующий столбец, который я хочу показать, это 1 - p_value, чтобы я мог понять значение.Но я не хочу дублировать весь CASE для следующего столбца.Это будет выглядеть так.

p_value, significance (1-p_value)
0.03, 0.97
0.02, 0.98

1 Ответ

0 голосов
/ 07 июня 2018

Ваш код проще:

SELECT (CASE WHEN value1 > 1 AND 1.0 - COALESCE(p_value1, 1.0) >= 0.8
             THEN p_value1
             WHEN value1 <= 1 AND 1.0 - COALESCE(p_value2, 1.0) > 0.8
             THEN p_value2 
        END) AS p_value, 
  ...
FROM table1
WHERE dt = '2018-01-01'

Вы не можете использовать p_value в любых последующих выражениях в том же SELECT (или в большинстве других предложений).Вы можете использовать CTE или подзапрос:

SELECT t.*, 1 - p_value
FROM (SELECT (CASE WHEN value1 > 1 AND 1.0 - COALESCE(p_value1, 1.0) >= 0.8
                   THEN p_value1
                   WHEN value1 <= 1 AND 1.0 - COALESCE(p_value2, 1.0) > 0.8
                   THEN p_value2 
              END) AS p_value, 
        ...
      FROM table1
      WHERE dt = '2018-01-01'
     ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...