我想获取每行的最大值,而不是字段的最大值。 例如,当我有这样的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
。
答案 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