Google bigquery 处理大查询中case语句中的空值

Google bigquery 处理大查询中case语句中的空值,google-bigquery,Google Bigquery,我想把一个小数分成命名组的值分组 例如: CASTX为NUMERIC时的情况不确定是否有一个基于语法的答案会有所帮助,但实现更干净或无重复代码的一个潜在方法是使用CTE将查询分解为逻辑块 with data as (), -- raw data casted as (), -- do your safe_cast here transformed as () - do your case statement here select * from transformed 它

我想把一个小数分成命名组的值分组

例如:


CASTX为NUMERIC时的情况不确定是否有一个基于语法的答案会有所帮助,但实现更干净或无重复代码的一个潜在方法是使用CTE将查询分解为逻辑块

with data as (), -- raw data
     casted as (), -- do your safe_cast here 
     transformed as () - do your case statement here
select * from transformed

它确实可以使代码更长,但也允许在转换阶段使用更干净的逻辑来实现您的既定目标。

这应该可以帮助您避免多次编写SAFE\u CAST:

WITH your_data AS (
SELECT "Bob" as name, "150.19" as weight UNION ALL 
SELECT "Tom", "2000.90" UNION ALL
SELECT "Jerry", Null)

, transform as (
SELECT name, CAST(weight as NUMERIC) as weight
FROM your_data
)

SELECT 
  name,
  CASE
    WHEN weight IS NULL 
      THEN "MissingData"
    WHEN weight<1000 
      THEN "Under1000"
    ELSE "Over1000"
  END as weight_agg
FROM transform
结果:


不能使用CASE的第二个缩短版本,因为它只适用于相等性检查,并且需要IS NULL比较。您当前的代码可能已经非常紧凑了。哦:好的:谢谢您: