在SQL SELECT中重复相同的操作

时间:2018-05-25 08:29:43

标签: sql google-bigquery

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

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, 
  ...

这样,转换/连接操作每个值只发生一次而不是n次。

修改 我还想将INTERMEDIATE_VALUE与WHERE子句

一起使用

2 个答案:

答案 0 :(得分:3)

简单的解决方案:

{{1}}

答案 1 :(得分:1)

以下是我发现这种情况(BigQuery Standard SQL)最优/最干净的方法

   
@RestController
@RequestMapping("/api/domain2")
public class DomainTwoController {

@RequestMapping("/facade3path"), 
@RequestMapping("/facade4path") ...
}

例如

#standardSQL
SELECT 
  INTERMEDIATE_VALUE>>1 AS FIRST_VALUE, 
  INTERMEDIATE_VALUE>>2 AS SECOND_VALUE,
  ...
FROM `project.dataset.your_table`, 
UNNEST([CAST(CONCAT('0x', composed) AS INT64)]) INTERMEDIATE_VALUE  
WHERE INTERMEDIATE_VALUE > <some_value>   

将结果显示为

#standardSQL
WITH `project.dataset.your_table` AS (
  SELECT '1' composed UNION ALL
  SELECT 'FF'
)
SELECT 
  composed,
  INTERMEDIATE_VALUE,
  INTERMEDIATE_VALUE>>1 AS FIRST_VALUE, 
  INTERMEDIATE_VALUE>>2 AS SECOND_VALUE
FROM `project.dataset.your_table`, 
UNNEST([CAST(CONCAT('0x', composed) AS INT64)]) INTERMEDIATE_VALUE  
WHERE INTERMEDIATE_VALUE > 10