coalesce 함수 질문 1 4 2,890

by 날막아봐 [Oracle 기초] coalesce [2020.08.15 21:51:16]


네이버, 구글링하다가 이해가 안되서 여기서 질문 올립니다.

sqld 시험 준비하면서 기출 문제 푸는데 coalesce 함수가 정확히 이해가 안됩니다.

함수 기능은 null 이 아닌 첫 번째 값 도출이라고 나와있습니다.

문제는 

 

col1  col2

100   100

null   60

null  null

 

테이블이 나와있고 

 

select coalesce(col1, col2*50, 50)

from tab1;

 

이렇게 나와있습니다.

수행 결과를 찾는 건데 

 

첫번째는 100 두번째는 100x50 마지막은 50이라고 생각해서

100

5000

50

이 정답일 줄알았는데

 

100

3000

50 

 

이 정답이더군요. 제가 어디를 잘못 이해하고 있는건가요?

 

읽어주셔서 감사합니다.

 

 

by pajama [2020.08.15 22:08:36]

각 레코드별로 아래와 같이 판별됩니다. 오라클 매뉴얼에 coalesce 함수 동작 방식에 대해 설명이 있습니다.

https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions023.htm#SQLRF00617

100   100 
-> coalesce(col1, col2*50, 50)
-> case when col1 is not null then col1
-> 100

null   60
-> coalesce(col1, col2*50, 50)
-> case when col1 is not null then col1 else coalesce (col2*50, 50)
-> case when col2*50 is not null then col2*50
-> 60*50 = 3000


null  null
-> coalesce(col1, col2*50, 50)
-> case when col1 is not null then col1 else coalesce (col2*50, 50)
-> case when col2*50 is not null then col2*50 else 50
-> 50

 


by 날막아봐 [2020.08.18 11:47:22]

상세한 답변 감사합니다. 이렇게 판단하는 건지 생각도 못했네요..


by 마농 [2020.08.18 08:04:17]

컬럼 단위로 전체 레코드에서 첫번째 값을 찾는게 아닙니다.
- col1 의 전체행의 값 중에서 null 이 아닌 첫번째 값 100 <-- 이거 아닙니다.
- col2 의 전체행의 값 중에서 null 이 아닌 첫번째 값 100 <-- 이거 아닙니다.
각 행마다 따로따로 계산하면 됩니다.
- 1행 : (100, 100*50, 50) = 100
- 2행 : (null, 60*50, 50) = 3000
- 3행 : (null, null*50, 50) = 50


by 날막아봐 [2020.08.18 11:48:03]

답변 감사합니다!

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