如何获取记录中列值的最大值? (BigQuery)

时间:2018-12-13 09:09:25

标签: sql google-bigquery

我想获取每行的最大值,而不是字段的最大值。 例如,当我有这样的sample_table时:

sample_table

|col1|col2|col3|
|--------------|
| 1  | 0  | 0  |
| 0  | 2  | 0  |
| 2  | 0  | 0  |
| 0  | 0  | 3  |

我想要的查询和结果是这样的:

查询

SELECT SOME_GET_MAX_VAL_FUNC(col1, col2, col3) AS max_val FROM sample_table;

结果

|max_val|
|-------|
|   1   |
|   2   |
|   2   |
|   3   |

我想要一些解决方案来代替SOME_GET_MAX_VAL_FUNC。 如果在SQL中几乎可行,那为什么呢? (我是SQL和BigQuery的新手)

注释

  • col的数量可能非常大,例如col1, col2, ... col200。 因此,使用CASE的解决方案对我来说很难。 SQL MAX of multiple columns?

  • 特别是,除最大值以外的其余列均等于0

2 个答案:

答案 0 :(得分:3)

您想要GREATEST

SELECT GREATEST(col1, col2, col3) 
FROM table t;

答案 1 :(得分:1)

  

cols的数量可能非常大,例如col1,col2,... col200

请牢记以上内容-以下是最佳解决方案(BigQuery Standard SQL),它不需要像GREATEST(col1, col2, col3, ..., col200)

那样显式键入所有列名称
#standardSQL
SELECT *, 
  (SELECT MAX(value) FROM 
    UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r':([^,}]+)')) value
  ) max_val
FROM `project.dataset.table` t   

如果要在您的问题中申请smple_table,结果将为

Row     col1    col2    col3    max_val  
1       1       0       0       1    
2       0       2       0       2    
3       2       0       0       2    
4       0       0       3       3