2016-06-07 7 views
1

У меня есть столбцы A, B, C and D и хотелось бы создать новый расчетный столбец с MAX(COLUMN_A, COLUMN_B)/MAX(COLUMN_C, COLUMN_D).Как я могу использовать Coalesce и Max для извлечения столбца с максимальным значением, который не является нулевым?

Некоторые из строк в этих столбцах также имеет значение NULL, как я могу сделать это в Impala или SQL

enter image description here

+1

Добавить некоторые данные образец таблицы (включая нуль-х и 0) и ожидаемый результат. – jarlh

ответ

5

Вы можете использовать least() и greatest() для этой цели. Игнорирование NULL:

select greatest(a, b)/greatest(c, d) 

Проблема являются NULL значения. Я думаю, что эти функции возвращают NULL, если любой аргумент NULL. Если значения, как известно, будет положительным, вы можете заменить NULL с 0:

select greatest(coalesce(a, 0), coalesce(b, 0))/greatest(coalesce(c, 0), coalesce(d, 0)) 

Или, с двумя значениями, вы можете использовать эту конструкцию:

select greatest(coalesce(a, b), coalesce(b, a))/greatest(coalesce(c, d), coalesce(d, c)) 
+1

Только предостережение 'select most (coalesce (a, 0), coalesce (b, 0))/наибольшее (coalesce (c, 0), coalesce (d, 0))' состоит в том, что значения в столбцах все положительны номера. Только оговорка «выбрать наибольшее (объединение (a, b), coalesce (b, a))/наибольшее (coalesce (c, d), coalesce (d, c)) состоит в том, что не все столбцы являются обнуляемыми. – Peter4499

+1

@ Peter4499. , , Это означает, что любое решение должно работать в вашем случае, хотя вы можете быть осторожны с делением на ноль. –