Как получить максимальное значение значений столбца в записи?(BigQuery) - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу получить максимальное значение каждой строки, а не максимальное значение поля.Например, когда у меня есть 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)

note

  • Число col s может быть очень большим, например col1, col2, ... col200,Поэтому решение использовать CASE было бы для меня трудным. SQL MAX из нескольких столбцов?

  • В частности, остальные столбцы, отличные от максимального значения, равны 0.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Количество столбцов может быть очень большим, например, 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      
0 голосов
/ 13 декабря 2018

Вы хотите GREATEST:

SELECT GREATEST(col1, col2, col3) 
FROM table t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...