如何重用配置单元查询中其他列的结果?

8tntrjer  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(272)

我有一个正在计算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'

它所做的是检查value1是否大于1,p\u value1是否大于0.8,然后打印p\u value2,否则如果value1小于1,则从p\u value2[1.03]获取值并将其打印为p\u值。
现在我要展示的下一个专栏是 1 - p_value 所以我可以得到它的意义。但我不想复制整个 CASE 下一栏。会是这样的。

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

vi4fp9gy1#

您的代码更简单:

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

相关问题