gpt4 book ai didi

sql - 在BigQuery的所有列上应用函数

转载 作者:行者123 更新时间:2023-12-03 17:20:36 25 4
gpt4 key购买 nike

我有一个包含100多个列c1,c2,c3 .... c200的表,我想在所有列上应用函数(假设MAX)。我可以为每列组成查询,但是我不能使用BigQuery抛出此错误的* Argument * can only be used in COUNT(*)

这种查询格式有效,但是我的查询大小会更大,并且与列数成正比。

SELECT max(c1) as c1, max(c2) as c2 .... max(c200) as c200 FROM `MYTABLE` group by user


我可以用较短的形式写查询吗?

最佳答案

下面的示例适用于BigQuery Standard SQL,并且避免按名称调用所有列,但副作用是,按逗号分隔的最大值列表仅是各个列的顺序

#standardSQL
SELECT STRING_AGG(CAST(max_val AS STRING) ORDER BY pos) max_values
FROM (
SELECT pos, MAX(CAST(val AS INT64)) max_val
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'".+?":([^,}]+)')) val WITH OFFSET pos
GROUP BY pos
)


在上面的示例中,我假设列都是INT64数据类型

您可以像下面的示例一样使用虚拟数据进行测试,操作

#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 c1, 2 c2, 3 c3 UNION ALL
SELECT 11, 1, 22
)
SELECT STRING_AGG(CAST(max_val AS STRING) ORDER BY pos) max_values
FROM (
SELECT pos, MAX(CAST(val AS INT64)) max_val
FROM `project.dataset.table` t,
UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(t), r'".+?":([^,}]+)')) val WITH OFFSET pos
GROUP BY pos
)


结果

Row max_values   
1 11,2,22

关于sql - 在BigQuery的所有列上应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54748217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com