각기 다른 테이블중에 MAX값에 해당하는 다른 컬럼값 가져는 방법 0 2 2,902

by 백광현 [SQL Query] GREATEST LEAST [2015.06.29 18:17:52]


궁금한게 있습니다.

 

A테이블

COL1 | COL2

1    | 2015-01-01

 

B테이블

COL1 | COL2

2    | NULL

 

C테이블

COL1 | COL2

3    | 2015-06-02

 

질문 :

A/B/C 테이블에서 COL2값이 MAX인 값에 해당하는 COL1의 값을 가져오고 싶어요.

COL1 3을 가지고 오고 싶은거죠.

 

SELECT GREATEST(A.COL2, B.COL2, C.COL2)

  FROM A테이블 A, B테이블 B, C테이블 C

;

위와 같이 하면 COL2의 MAX값은 가져오긴 한데,

좀 더  꼼수를 쓴다면 COL2 || COL1으로 대체해서 MAX값을 찾고 최종적으로 자리수를 끊어서 판별을 해도 되긴 한데요.

이럴 경우 어떻게 처리하는게 효율적인지 알고 싶습니다.

 

 

 

by jkson [2015.06.30 07:56:14]

말씀하신 방법도 괜찮고..

SELECT MIN(COL1) KEEP(DENSE_RANK LAST ORDER BY COL2) VAL
  FROM
    (
    SELECT COL1, COL2 FROM 테이블A
    UNION ALL
    SELECT COL1, COL2 FROM 테이블B
    UNION ALL
    SELECT COL1, COL2 FROM 테이블C
    )

이렇게 할 수도 있구요.

그런데 A,B,C 테이블을 조인하셨는데 특별히 조인해야할 이유가 있나요?

이유가 없다면 조인으로 하시면 경우의 수를 너무 많이 만들게 되어 비효율적일 거 같은데요..


by 마농 [2015.06.30 08:35:01]
SELECT *
  FROM (SELECT col1, col2
          FROM (SELECT col1, col2 FROM A테이블 WHERE col2 IS NOT NULL ORDER BY col2 DESC)
         WHERE ROWNUM <= 1
         UNION ALL
        SELECT col1, col2
          FROM (SELECT col1, col2 FROM B테이블 WHERE col2 IS NOT NULL ORDER BY col2 DESC)
         WHERE ROWNUM <= 1
         UNION ALL
        SELECT col1, col2
          FROM (SELECT col1, col2 FROM C테이블 WHERE col2 IS NOT NULL ORDER BY col2 DESC)
         WHERE ROWNUM <= 1
         ORDER BY 2 DESC, 1 DESC
        )
 WHERE ROWNUM <= 1
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입