首页 > 解决方案 > 在 SQL SELECT 中重复相同的操作

问题描述

我正在将一列解析为不同的表,并且我有一个不断重复的操作。有没有办法避免冗余,例如,定义一个变量?这就是我的查询的样子:

SELECT 
  CAST(CONCAT('0x', composed) as INT64)>>1 AS FIRST_VALUE, 
  CAST(CONCAT('0x', composed) as INT64)>>2 AS SECOND_VALUE, 
  ...

我想要类似的东西:

SELECT 
  INTERMEDIATE_VALUE = CAST(CONCAT('0x', composed) as INT64)
  INTERMEDIATE_VALUE>>1 AS FIRST_VALUE, 
  INTERMEDIATE_VALUE>>2 AS SECOND_VALUE, 
  ...

这样 cast/concat 操作每个值只发生一次,而不是 n 次。

编辑: 我还想将 INTERMEDIATE_VALUE 与 WHERE 子句一起使用

标签: sqlgoogle-bigquery

解决方案


简单的解决方案:

select 
  INTERMEDIATE_VALUE>>1 AS FIRST_VALUE, 
  INTERMEDIATE_VALUE>>2 AS SECOND_VALUE, 
  ....
from (
     select CAST(CONCAT('0x', composed) as INT64) as INTERMEDIATE_VALUE 
     from .... 
) 
where INTERMEDIATE_VALUE = 'something'

推荐阅读