7장 기본 함수 배우기
1. 문자 함수
함수설명
LOWER | 소문자로 변환 |
UPPER | 대문자로 변환 |
LENGTH | 문자의 길이 반환 |
SUBSTR | 문자 값 중 원하는 길이만큼 반환 |
RTRIM | 문자열 오른쪽 공백 제거 |
LTRIM | 문자열 왼쪽 공백 제거 |
TRIM | 문자열 양쪽 공백 제거 |
REPLACE | 특정 문자열을 다른 문자열로 대체 |
COALESCE | 조건에 따라 여러 가지 값으로 치환 |
INTCAP | 첫 글자를 대문자, 나머지를 소문자로 변환 |
2. 숫자 함수
함수설명
ROUND | 소수점의 자릿수를 지정하여 반올림 |
TRUNC | 해당 소수점 자리에서 잘라낼 때 사용 |
MOD(M, N) | M을 N으로 나눈 나머지 |
ABS | 값을 절대값으로 변환할 때 사용 |
SIGN | 숫자가 양수면 1, 음수면 -1, 0이면 0을 반환 |
SORT | 값의 제곱근을 반환 |
COS | 값의 COSINE값 반환 |
SIN | 값의 SINE값 반환 |
PI | 값의 파이값 반환 |
TAN | 값의 TANGENT값 반환 |
EX1) PROD_SALES 테이블을 사용하여 정수 첫째 자리에서 반올림한 제품 판매금액을 계산한 후 별칭을 SALES_REV로 설정
- SELECT PROD_ID, TOTAL_SALES,
ROUND(TOTAL_SALES, -1) AS SALES_REV
FROM PROD_SALES;
3. 날짜 함수
함수설명비고
ADD_MONTHS | 지정한 날짜에 개월 수를 더한 값 출력 | |
SYSDATE | 현재 시스템의 날짜 데이터 반환 | ACCESS는 NOW() ORACLE은 SYSDATE SQL SERVER는 GATEDATE() |
LAST_DAY | 해당 월의 마지막 날짜 반환 | ORACLE에서 제공하는 함수 |
MONTH_BETWEEN | 지정한 월 간의 월 수 반환 | ORACLE에서 제공하는 함수 |
8장 함수 활용하기
1. 기술통계 함수
함수설명비고
COUNT | 행의 수 반환 | NULL값을 포함한 전체 행의 수 : COUNT(*) NULL값을 제외한 전체 행의 수 : COUNT(열 이름) 중복을 제외한 행의 수 : COUNT(DISTINCT 열 이름) |
SUM | 행의 합계 반환 | |
AVG | 행의 평균 반환 | |
MAX | 행의 최댓값 반환 | |
MIN | 행의 최솟값 반환 | |
STDENV | 행의 표준편차 반환 | |
VARIANCE | 행의 분산 반환 |
기술통계 함수들은 기본적으로 NULL값을 제외하여 계산한다.
따라서 NULL값을 0으로 보고 계산하려면 COALESCE 함수를 사용한다.
EX1) STUD_SCORE 테이블을 사용하여 영어 점수의 평균 출력
-
- SELECT AVG(COALESCE(ENG_SCORE, 0)) AS ENG_AVG
FROM STUD_SCORE;
- SELECT AVG(COALESCE(ENG_SCORE, 0)) AS ENG_AVG
2. 조건문 - CASE WHEN
-
- SELECT 열 이름1,
CASE WHEN 조건1 THEN 결과값1
CASE WHEN 조건2 THEN 결과값2
ELSE 결과값3 END AS 새로운 열 이름
FROM 테이블명;
- SELECT 열 이름1,
EX2) CLERK는 7%, OFFICER는 5%, MANAGER는 3% 연방 인상할 경우에 STAFF_SAL 테이블을 사용하여 각 직원별 인상 연봉을 계산
-
- SELECT ID, JOB, CURRENT_SAL,
CASE WHEN JOB = 'CLERK' THEN CURRENT_SAL * 1.07
CASE WHEN JOB = 'OFFICER' THEN CURRENT_SAL * 1.05
CASE WHEN JOB = 'MANAGER' THEN CURRENT_SAL * 1.03
ELSE CURRENT_SAL
END AS NEXT_SAL
FROM STAFF_SAL;
- SELECT ID, JOB, CURRENT_SAL,
DB에 따라서 DECODE 함수도 사용 가능하다.
DECODE(열 이름, 조건1, 결과값1,
조건2, 결과값2, 기본값) 새로운 열 이름
과 같은 형태로 사용할 수 있다.
EX3) CASA_201312에서 12월 수신평균잔액이 11월보다 10% 증가 시 오퍼를 제공할 때 오퍼를 제공해야할 고객은 1, 아니면 0으로 분류하여 OFFER_ACCEPT로 별칭 부여
-
- SELECT CUST_ID, CUST_SEG, BALANCE_201311, BALANCE_201312,
CASE WHEN BALANCE_201312 >= BALANCE_201311 * 1.1 THEN 1
ELSE 0
END AS OFFER_ACCEPT
FROM CASA_201312;
- SELECT CUST_ID, CUST_SEG, BALANCE_201311, BALANCE_201312,
9장 데이터의 그룹화, 필터링
1. 그룹화 함수
-
- SELECT 그룹화할 열 이름1, 그룹화할 열 이름2, 집계 함수
FROM 테이블명
WHERE 조건절
GROUP BY 열 이름1, 열 이름2;
ORDER BY 열 이름1; - SELECT 그룹화할 열 이름1, 그룹화할 열 이름2, 집계 함수
FROM 테이블명
WHERE 조건절
GROUP BY 1, 2;
- SELECT 그룹화할 열 이름1, 그룹화할 열 이름2, 집계 함수
그룹화될 열에 NULL값을 포함할 경우 NULL값도 그룹화된다.
2. 그룹화된 데이터의 필터링
-
- SELECT 그룹화할 열 이름1, 집계 함수
FROM 테이블명
WHERE 조건절
GROUP BY 열 이름1
HAVING 집계 함수 조건;
- SELECT 그룹화할 열 이름1, 집계 함수
EX1) 구매금액의 평균이 7만원 이상인 고객 데이터 출력
-
- SELECT CUST_NM, AVG(SALES_AMT) AS AVG_SALES_AMT
FROM PROD_SALES
GROUP BY CUST_NM
HAVING AVG( SALES_AMT) >= 70000;
- SELECT CUST_NM, AVG(SALES_AMT) AS AVG_SALES_AMT
그룹화 필터링 이후 ORDER BY를 사용한다.
WHERE 조건절의 조건은 데이터가 그룹화되기 전에 필터링하고, HAVING 조건절은 그룹화 이후의 필터링이다.
'스터디 > SQL' 카테고리의 다른 글
[SQL] SQL 기초교재 10 ~ 12 (0) | 2019.08.03 |
---|---|
[SQL] SQL 기초교재 04 ~ 06 (0) | 2019.08.03 |
[SQL] SQL 기초교재 01 ~ 03 (0) | 2019.08.03 |