Ниже приведен пример для стандартного SQL BigQuery, позволяющий избежать вызова всех столбцов по именам, но в качестве побочного эффекта приводится только один разделенный запятыми список максимальных значений в порядке соответствующих столбцов
#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