如何在BigQuery中计算行内最大值并返回目标结果?
在BigQuery中计算行内最大值
原始数据
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| A. | 55 | 50 | 45 |
| B. | 30 | 20 | 25 |
目标结果
| Column A | Column B |
|---|---|
| A. | 55 |
| B. | 30 |
解决方法
方法1:使用GREATEST函数
这是最直接的实现方式,GREATEST函数可接收多个列作为参数,返回其中的最大值。
SELECT `Column A`, GREATEST(`Column B`, `Column C`, `Column D`) AS `Column B` FROM `你的项目ID.你的数据集ID.你的表名`
如果行内存在NULL值,GREATEST会自动忽略,仅计算非NULL值的最大值。若需要处理全NULL的行,可搭配COALESCE设置默认值:
SELECT `Column A`, COALESCE(GREATEST(`Column B`, `Column C`, `Column D`), 0) AS `Column B` FROM `你的项目ID.你的数据集ID.你的表名`
方法2:数组+UNNEST+MAX
当需要比较的列数较多时,无需逐个罗列列名,可将目标列转为数组,通过UNNEST展开后取最大值。
SELECT `Column A`, (SELECT MAX(val) FROM UNNEST([`Column B`, `Column C`, `Column D`]) val) AS `Column B` FROM `你的项目ID.你的数据集ID.你的表名`
这种方式修改列范围时,仅需调整数组内的列名即可,灵活性更高。
内容的提问来源于stack exchange,提问作者shalmali
相关产品推荐
相关产品推荐

