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 설명
- salary 값에서 전체 직원 급여의 평균값을 빼서 sal_avg_gap(평균 급여 차이)이라는 별칭을 부여했습니다.
- 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) 값을 반환함
- 급여가 평균보다 높은지/낮은지를 판별하는 데 활용 가능
- 손익 계산, 조건문에서의 사용, 데이터 필터링 등에 적용 가능
데이터 분석, 보고서 생성, 트랜잭션 검증 등 다양한 분야에서 활용할 수 있으니 꼭 기억해 두세요! 😊
'Database' 카테고리의 다른 글
오라클/SQL FIRST_VALUE, LAST_VALUE 함수: 시작 레코드와 마지막 레코드의 값 조회하기 (0) | 2025.03.31 |
---|---|
오라클 SQL ABS 함수: 절대값 반환 함수 완벽 정리 (0) | 2025.03.31 |
오라클 SQL 성능 튜닝을 위한 10가지 팁 (0) | 2024.12.05 |
데이터베이스를 설계할 때 고려해야 할 점 (0) | 2024.12.05 |
오라클 클라우드와 온프레미스 비교 (0) | 2024.12.05 |