Rank () с нулевым первым в Bigquery на основе нескольких столбцов - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть данные, как показано ниже

Subject_id T1  T2  T3  T4  T5
1234
1234       21  22  23  24  25
3456       34  31    
3456       34  31  36  37  39
5678       65  64  62  61  67
5678       65  64  62      67
9876       12  13  14  15  16
4790       47  87  52  13  16

Как вы можете видеть выше, subject_ids 1234, 3456 и 5678 повторяются.

Я хотел бы удалить те повторяющиеся объекты, когда они имеют значение null/empty/blank в любом из столбцов, таких как T1,T2,T3,T4, T5.

Теперь проблема в реальном времени, я иметь более 250 столбцов и не уверен, смогу ли я поставить 250 где пункт проверки для значения null. Итак, я пытался с row_number (), rank (). Не уверен, какой из них лучше. Ниже приведено то, что я пытался

SELECT *,ROW_NUMBER() OVER(PARTITION BY subject_id,T1,T2,T3,T4,T5) NULLS FIRST
from table A;

Но он выдает синтаксическую ошибку Syntax error: Unexpected keyword NULLS at [1:62]

Я ожидаю, что мой вывод будет как ниже

Subject_id T1  T2  T3  T4  T5
1234       21  22  23  24  25   
3456       34  31  36  37  39
5678       65  64  62  61  67
9876       12  13  14  15  16
4790       47  87  52  13  16

Как вы можете видите, выходные данные не содержат строк, у которых было по крайней мере 1 пустое / пустое / пустое значение в T1,T2,T3,T4,T5 столбцах.

Может помочь?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT *
FROM `project.dataset.table` t
WHERE NOT REGEXP_CONTAINS(FORMAT('%t', t), r'NULL')  

Если применить к образцу данных из вашего вопроса - вывод

Row Subject_id  t1  t2  t3  t4  t5   
1   1234        21  22  23  24  25   
2   3456        34  31  36  37  39   
3   5678        65  64  62  61  67   
4   9876        12  13  14  15  16   
5   4790        47  87  52  13  16   
0 голосов
/ 07 апреля 2020

Я думаю, вы хотите:

SELECT *,
       ROW_NUMBER() OVER (PARTITION BY subject_id
                          ORDER BY (T1 IS NULL OR T2 IS NULL OR T3 IS NULL OR T4 IS NULL OR T5 IS NULL) DESC
                         )
FROM table A;

Я мог бы подойти к этой проблеме по-другому, но, похоже, это то, что вы пытаетесь написать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...