하이브 SQL - 여러 칼럼의 값 중 최대값과 최소값 가져오는 방법!

2019. 7. 22. 07:42

SQL을 이용하면 보통 CREATE, SELECT, GROUP BY, INSERT, DROP 등의 문법을 많이 사용한다. 하지만 이런 문법들만으로는 어느 순간 한계에 부딪히게 된다. 이런 난해한 경우를 해결하기 위해 SQL에는 여러가지 함수들이 있다.

오늘은 하이브 SQL에서 여러 칼럼의 값 중에 최대값과 최소값을 가져오는 방법을 알아보도록 하겠다.


빅데이터



한 칼럼의 최대값을 가져오기 위해서는 MAX를 최소값을 가져오기 위해서는 MIN을 사용한다. 그런데 여러 칼럼을 비교하여 그 중에 최대인 값을 가져오려면 어떻게 해야 할까. 단순하게는 CASE,WHEN을 이용해도 될 것 같다.


하지만, SQL에는 이러한 작업을 편리하게 처리할 수 있는 함수가 있다. 바로 greatest와 least이다.


사용방법은 간단하다. greatest하고 함수 안에 칼럼값들을 넣어주면 된다. 그러면 그 중에서 가장 큰 값을 가져온다. 반대로 least 함수를 이용하면 함수 안에 여러 칼럼값들 중에서 가장 작은 값을 가져온다.


추천포스트



실제 예제를 살펴보자.


아래와 같은 테이블이 있다고 가정해보자.

 grp1

grp2 

grp3 

var1 

var2 

var3 

Z

가 

1

6

9

Y

나 

 3

 5

 -1

X

다 

 9

 4

 2

A

X

 3

 1

 -3

B

Y

 2

 2

 1

C

X

 4

 3

 0


가장 큰 칼럼의 값을 추출하기 위해 gratest를 사용했는데, 에러가 발생한다.


SELECT GREATEST(VAR1, VAR2, VAR3) AS VAR_GR 
FROM TEMP.TEST
;


위와 같이 사용하면 "Bad status for request TFetchResultReq(fetchType=0 ~ " 이라는 알 수 없는 에러가 발생한다. 더 확인해보니 GREATEST 함수 안에 변수타입을 지정해야줘야 한다고 한다. 이미 INT타입의 칼럼들인데 왜 지정해 줘야 하는지는 알 수 없지만. 아래와 같이 직접 지정해주고 나니 에러가 발생하지는 않는다.


SELECT GREATEST( INT(VAR1), INT(VAR2), INT(VAR3) ) AS VAR_GR, LEAST( INT(VAR1), INT(VAR2), INT(VAR3) ) AS VAR_LS
FROM TEMP.TEST
;


위와 같이 하면 아래와 같이 칼럼등 중에 최대값과 최소값을 추출할 수 있다.


VAR_GR

VAR_LS

9

1

5

-1

9

2

3

-3

2

1

4

0


혹시 문자열을 비교하고 싶다면 INT대신에 STRING을 사용하면 된다.



오늘은 이렇게 하이브 SQL에서 여러 칼럼의 값 중 최대값과 최소값을 가져오는 방법에 대해서 알아보았다. 함수를 알면 간단하게 할 수 있는 작업도 모르면 어려워보인다. greatest와 least함수를 통해 손쉽게 할 수 있었다.


몇 가지 팁이나 방법을 알면 파이썬을 더 효율적으로 코딩할 수 있는 방법들이 있다. 자세한 내용이 궁금하다면, 아래 링크를 참조해보자.
( 참조: 파이썬 효율적인 코딩팁과 방법들 )


댓글()
  1. Favicon of https://zzing548.tistory.com BlogIcon zzing548 2019.07.22 21:13 신고 댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 늘어나지 않는 방문자수 때문에 블로그운영에 어려움을 겪고 계시면 제 블로그에 한번 방문해주시면 감사하겠습니다. https://zzing548.tistory.com/entry/Selected-Keyword 에서 블로그 트래픽을 늘리기 위한 Selected Keywords에 대한 내용을 소개합니다.