본문 바로가기
Database

오라클 SQL SIGN 함수: 숫자의 부호를 판정하는 방법

by 굿센스굿 2025. 3. 31.
반응형

1. SIGN 함수란?

데이터를 다룰 때 값이 양수인지, 음수인지, 혹은 0인지 판별하는 것이 중요할 때가 있습니다. 오라클(Oracle) SQL에서는 SIGN 함수를 사용하여 이러한 부호 판별을 간단하게 수행할 수 있습니다. SIGN 함수는 입력된 숫자 값의 부호를 판정하여 아래와 같은 값을 반환합니다.

입력 값 반환 값

양수 (Positive) 1
0 0
음수 (Negative) -1

즉, SIGN(숫자)를 실행하면 해당 숫자가 양수일 경우 1, 0이면 0, 음수면 -1을 반환하는 것입니다.


2. SIGN 함수 사용법

SIGN 함수의 기본적인 사용법은 다음과 같습니다.

(1) 임의의 숫자에 대해 SIGN 함수 사용하기

SELECT SIGN(숫자) FROM DUAL;
  • DUAL 테이블은 오라클에서 기본 제공하는 가상 테이블로, 임의의 연산을 테스트할 때 사용됩니다.
  • SIGN(숫자)를 실행하면 해당 숫자의 부호를 판단하여 반환됩니다.

(2) 특정 테이블의 컬럼 값에 대해 SIGN 함수 사용하기

SELECT SIGN(컬럼명) FROM 테이블명;
  • 특정 테이블의 컬럼 데이터를 가져와서 그 값이 양수인지, 음수인지, 0인지 판별할 수 있습니다.

3. SIGN 함수 예제

SIGN 함수는 간단하지만 실전에서 매우 유용하게 활용될 수 있습니다. 아래 몇 가지 예제를 통해 SIGN 함수의 사용법을 익혀보겠습니다.

예제 1: 숫자 값의 부호 판별

가상 테이블 DUAL을 활용하여 임의의 숫자에 대한 SIGN 함수를 실행해 보겠습니다.

SELECT SIGN(-10000) AS sign_negative, 
       SIGN(999) AS sign_positive, 
       SIGN(0) AS sign_zero 
FROM DUAL;

결과:

SIGN_NEGATIVE SIGN_POSITIVE SIGN_ZERO

-1 1 0

위 결과에서 -10000은 음수이므로 -1, 999는 양수이므로 1, 0은 그대로 0이 반환된 것을 확인할 수 있습니다.


예제 2: 직원 급여를 기준으로 평균 급여보다 높은지 낮은지 판별하기

이제 employees 테이블을 활용하여 직원들의 급여(salary)가 평균 급여보다 높은지, 낮은지를 판단하는 SQL을 작성해보겠습니다.

🔹 실행할 SQL

SELECT employee_id, salary, 
       ROUND((salary - (SELECT AVG(salary) FROM employees)), 1) AS sal_avg_gap,
       SIGN(ROUND((salary - (SELECT AVG(salary) FROM employees)), 1)) AS sal_avg_gap_sign
FROM employees;

🔹 SQL 설명

  1. salary 값에서 전체 직원 급여의 평균값을 빼서 sal_avg_gap(평균 급여 차이)이라는 별칭을 부여했습니다.
  2. sal_avg_gap의 값을 SIGN 함수를 이용하여 부호를 판별하고, 그 결과를 sal_avg_gap_sign이라는 새로운 컬럼으로 반환합니다.
    • 평균보다 급여가 높으면 1
    • 평균과 같으면 0
    • 평균보다 낮으면 -1

🔹 결과 예시

EMPLOYEE_ID SALARY SAL_AVG_GAP SAL_AVG_GAP_SIGN

101 6000 1200.5 1
102 4500 -299.5 -1
103 5200 400.5 1
104 4800 0.0 0

위 테이블에서 볼 수 있듯이, 급여가 평균보다 높으면 1, 낮으면 -1, 동일하면 0이 출력됩니다.


4. SIGN 함수 활용 예시

SIGN 함수는 다양한 실전 SQL에서 활용할 수 있습니다.

(1) 급여가 평균보다 높은 직원만 조회하기

SELECT employee_id, salary
FROM employees
WHERE SIGN(salary - (SELECT AVG(salary) FROM employees)) = 1;
  • SIGN(salary - 평균급여) = 1 조건을 추가하여 급여가 평균보다 높은 직원만 조회할 수 있습니다.

(2) 금액의 부호에 따라 "이익" 또는 "손실"로 분류하기

만약 매출 및 비용 데이터를 담고 있는 테이블 sales가 있다면, 각 거래가 이익인지 손실인지를 판단할 수 있습니다.

SELECT transaction_id, revenue - cost AS profit, 
       CASE SIGN(revenue - cost)
           WHEN 1 THEN '이익'
           WHEN -1 THEN '손실'
           ELSE '손익 없음'
       END AS profit_status
FROM sales;
  • revenue - cost 값이 양수면 이익, 음수면 손실, 0이면 손익 없음이 출력됩니다.

5. SIGN 함수와 다른 함수 비교

SIGN 함수와 비슷한 기능을 하는 함수들과 비교해 보겠습니다.

함수명 설명 예제 반환 값 (입력값: -10, 0, 10)

SIGN 숫자의 부호를 판별 SIGN(숫자) -1, 0, 1
ABS 절댓값 반환 ABS(숫자) 10, 0, 10
ROUND 반올림 처리 ROUND(숫자, 자릿수) -10, 0, 10
CEIL 올림 처리 CEIL(숫자) -10, 0, 10
FLOOR 내림 처리 FLOOR(숫자) -10, 0, 10

SIGN 함수는 단순한 부호 판별이 필요할 때 가장 유용한 함수입니다.


6. 마무리

SIGN 함수는 오라클 SQL에서 숫자의 부호를 판별할 때 매우 간단하면서도 강력하게 활용할 수 있는 함수입니다.

핵심 정리

  • 양수(1), 0(0), 음수(-1) 값을 반환함
  • 급여가 평균보다 높은지/낮은지를 판별하는 데 활용 가능
  • 손익 계산, 조건문에서의 사용, 데이터 필터링 등에 적용 가능

데이터 분석, 보고서 생성, 트랜잭션 검증 등 다양한 분야에서 활용할 수 있으니 꼭 기억해 두세요! 😊

반응형