DB/SQL 응용

'SQL' 단일 행 함수, 그룹 함수 (*비교 분석)

케이(kay) 2022. 7. 3. 21:58
반응형
SMALL

함수의 종류

단일 행 함수 : 문자(→숫자), 숫자(→숫자), 날짜(MONTH_BETWEEN 제외/→날짜),

                          변환(→타입변환), 일반(NVL,DECODE,CASE,WHEN,순위함수 등)

그룹 함수          : 함수, GROUP BY, HAVING BY

 

 

 

단일 행 함수 - 문자 타입 함수

문자 타입 함수 설명

SELECT SUBSTR(first_name, 1, 2)
FROM   employees;

SUBSTR

 

 

단일 행 함수 - 숫자 타입 함수

숫자 타입 함수 설명

SELECT  TRUNC(ROUND(salary / 3, 0))
FROM   employees;

TRUNC(ROUND())

 

 

단일 행 함수 - 날짜 타입 함수

날짜 타입 함수 설명

SELECT SYSDATE
FROM DUAL;

SYSDATE : 오늘 날짜

DUAL : 더미 테이블

 

SELECT SYSDATE, hire_date, 
       MONTHS_BEETWEEN(SYSDATE, hire_date) 적용결과
FROM employees
WHERE employee_id BETWEEN 100 AND 106;

MONTHS_BEETWEEN : 개월 수 차이

 

SELECT hire_data,
       ADD_MONTHS(hire_data, 3) 더하기_적용결과,
       ADD_MONTHS(hire_data, -3) 빼기_적용결과
FROM  employees
WHERE employee_id BETWEEN 100 AND 106;

ADD_MONTHS : 개월수 더하기

 

단일 행 함수 - 변환 함수

SELECT SYSDATE,
       TO_CHAR(SYSDATE, 'YY'),
       TO_CHAR(SYSDATE, 'YYYY'),
       TO_CHAR(SYSDATE, 'MM'),
       TO_CHAR(SYSDATE, 'MON'),
       TO_CHAR(SYSDATE, 'YYYYMMDD') 응용적용1,
       TO_CHAR(TO_DATE('20171008'),'YYYYMMDD' 응용적용2
FROM DUAL;

SELECT TO_NUMBER('123')
FROM DUAL;

SELECT TO_DATE('20171007'), 'YYMMDD')
FROM DUAL;

TO_CHAR(VARCHAR2) : 문자로 변환

TO_NUMBER : 숫자로 변환

TO_DATE : 날짜로 변환

 

단일 행 함수 - 일반 함수

SELECT  employee_id,
        salary,
        RANK()       OVER(ORDER BY salary DESC) RANK_급여
        DENSE_RANK() OVER(ORDER BY salary DESC) DENSE_RANK_급여
        ROW_NUMBER() OVER(ORDER BY salary DESC) ROW_NUMBER_급여
FROM   employees
WHERE  employee_id BETWEEN 100 AND 106;

RANK : 순위 (동순위는 동일한 순서)

DEN_RANK : 순위 (동순위는 하나건수)

ROW_NUMBER : 순위 (동순위도 고유값)

 

SELECT  salary * commission_pct
FROM    employees
WHERE   employee_id BETWEEN 100 AND 106
ORDER BY commission_pct;

SELECT salary * NVL(commission_pct, 1)
FROM employees
WHERE employee_id BETWEEN 100 and 106
ORDER BY commission_pct;

NVL : null값을 ‘ ‘ 값으로 치환

 

SELECT  first_name, 
        last_name, 
        department_id, 
        salary 원래급여,          
        DECODE(department_id, 60, salary*1.1, salary) 조정된급여,
        DECODE(department_id, 60, '10%인상', '미인상') 인상여부
FROM   employees
WHERE  employee_id BETWEEN 100 AND 106;

DECODE : 하나의 조건값에 해당 할 경우 치환값 또는 기본값

 

SELECT employee_id, first_name, last_name, salary, 
       CASE 
            WHEN salary >= 9000 THEN '상위급여'            
            WHEN salary BETWEEN 6000 AND 8999  THEN '중위급여'
            ELSE '하위급여'
       END AS 급여등급
FROM  employees
WHERE job_id = 'IT_PROG';

CASE : 복잡한 조건값을 출력

 

 

그룹 함수

그룹 함수 설명

 

SELECT COUNT(*), AVG(salary)
FROM employees;

COUNT, AVG

 

SELECT SUM(salary) AS 총월급여, 
       SUM(salary)*0.1 AS 인상분, 
       SUM(salary)*1.1 AS 변경후_총월급여
FROM employees;

SELECT SUM(salary) AS 총월급여, 
       TRUNC(SUM(salary)*0.1,0) AS 추가_인상분, 
       ROUND(SUM(salary)*1.1,0) AS 인상후_총월급여
FROM employees;

SUM

 

 

그룹 함수 - GROUP BY 절 HAVING 절

SELECT job_id 직무, SUM(salary) 직무별_총급여, AVG(salary) 직무별_평균급여
FROM   employees
WHERE  employee_id >= 10
GROUP BY job_id
ORDER BY  직무별_총급여 DESC, 직무별_평균급여;

GROUP BY

 

총 판매 금액과 총 판매 수량 비교

SELECT  item_id, 
        SUM(sales) AS SALE, 
        SUM(QUANTITY) AS QTY 
          --, COUNT(order_no) AS ORDER_CNT
FROM  order_info
GROUP BY item_id
ORDER BY SUM(sales) DESC

비교분석문 : GROUP BY 절, — 주석으로 비교

- ‘M0005’가 가장 많은 매출 - 판매 단가 비교 가능

 

 

 

(출처1: 핵심만 쉽게, 모두의 SQL 데이터 분석)

 

 

반응형
LIST