2016-06-07 5 views
1

나는 A, B, C and D 열을 가지고 있으며 MAX(COLUMN_A, COLUMN_B)/MAX(COLUMN_C, COLUMN_D)으로 계산 된 열을 새로 만들고 싶습니다. Coalesce 및 Max를 사용하여 null이 아닌 최대 값의 열을 추출하는 방법

이 컬럼의 행의 일부

또한 내가 당신이 목적을 위해 least()greatest()을 사용할 수 있습니다 임팔라 또는 SQL

enter image description here

+1

일부 샘플 테이블 데이터를 추가 포함 널 (null)의과 0 ')와 예상 결과를 비교합니다. – jarlh

답변

5

에서이 작업을 수행 할 수있는 방법, NULL 값이 있습니다. NULL 무시 :

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

문제는 NULL 값입니다. 어떤 인수가 NULL이면이 함수는 NULL을 반환한다고 생각합니다. 이 구조를 사용하여, 두 개의 값으로,

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

을 또는 : 값이 긍정적 인 것으로 알려진 경우 0 NULL을 대체 할 수 있습니다 (

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

'가장 큰 것을 선택 (coalesce (a, 0), coalesce (b, 0))/최대 (coalesce (c, 0), coalesce (d, 0))'하는 경고는 열의 값이 모두 양수 번호. '가장 큰 것을 선택 (coalesce (a, b), coalesce (b, a))/가장 중대한 (coalesce (c, d), coalesce (d, c))'하는 경고는 모든 컬럼이 nullable이 아님을 의미합니다. – Peter4499

+1

@ Peter4499. . . 즉, 0으로 나누기에주의해야 할 수도 있지만 어느 경우 든 솔루션이 작동해야합니다. –