Как получить имя столбца на основе условия - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть следующий запрос, который проверяет, являются ли столбцы пустыми

select 
    sum(case when Column_1 is null then 1 else 0 end) as Column_1, 
    sum(case when Column_2 is null then 1 else 0 end) as Column_2, 
    sum(case when Column_3 is null then 1 else 0 end) as Column_3,
from TestTable 

Это дает:

Column_1  Column_2  Column_3
0         1         0

Я хочу получить имена столбцов, которые имеют нулевые значения. пут это:

Column_1
Column_3

Как мне это сделать в Presto? Не так просто получить имя столбца, возвращенное из запроса.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я понимаю, что вам нужны результаты в отдельной строке, а не в объединенной строке.

Если это так, вы можете отключить существующий набор результатов с помощью unnest() и массивов;

select t2.key
from (
    select 
        sum(case when Column_1 is null then 1 else 0 end) as Column_1, 
        sum(case when Column_2 is null then 1 else 0 end) as Column_2, 
        sum(case when Column_3 is null then 1 else 0 end) as Column_3
    from TestTable 
) t1
cross join unnest(
    array['Column1', 'Column_2', 'Column_3'],
    array[Column1, Column_2, Column_3]
) t2 (key, value)
where t2.value = 0
1 голос
/ 30 апреля 2020

Один метод:

select (case when count(column_1) <> count(*) then 'Column_1;' else '' end) ||
       (case when count(column_2) <> count(*) then 'Column_2;' else '' end) ||
       (case when count(column_3) <> count(*) then 'Column_3;' else '' end)
from TestTable  ;
...