SQL 쿼리 그룹
-- 중복행의 제거
SELECT DISTINCT JOB_ID
FROM EMPLOYEES;
-- GROUP BY
-- 같은 그룹으로 묶어줌
SELECT JOB_ID
FROM EMPLOYEES
GROUP BY JOB_ID;
SELECT DEPARTMENT_ID
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID;
-- HAVING(GROUP BY절과 같이 사용, 단독으로는 사용불가)
-- GROUP BY의 조건절
SELECT DEPARTMENT_ID,SUM(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
SELECT JOB_ID,SUM(SALARY)
FROM EMPLOYEES
GROUP BY JOB_ID
HAVING SUM(SALARY) >= 100000;
-- 그룹 여러개 가능
SELECT DEPARTMENT_ID,JOB_ID,COUNT(SALARY), SUM(SALARY), SUM(SALARY)/COUNT(SALARY), AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID,JOB_ID;
/*
그룹함수와 연계해서 사능하는 것
COUNT(*) OVER(PARTITION BY)
MAX
MIN
SUM
RANK()
ROW_NUMBER()
DENSE_RANK()
*/
SELECT FIRST_NAME,JOB_ID,SALARY,
COUNT(JOB_ID) OVER(PARTITION BY JOB_ID),
SUM(SALARY)OVER(PARTITION BY JOB_ID)
FROM EMPLOYEES;
-- 그룹함수
/*
COUNT
SUM
AVG
MAX
MIN
*/
-- 그룹함수 (SALARY로 묶음)
SELECT COUNT(SALARY)
FROM EMPLOYEES
WHERE JOB_ID = 'IT_PROG';
-- 갯수 , 합계 , 평균
SELECT COUNT(SALARY), SUM(SALARY), SUM(SALARY)/COUNT(SALARY), AVG(SALARY)
FROM EMPLOYEES
WHERE JOB_ID = 'IT_PROG';
/*
NVL(대상이 되는 컬럼, 0)
대상이 되는 컬럼 != NULL -> 대상이 되는 컬럼
대상이 되는 컬럼 == NULL -> 0
NVL2(대상이 되는 컬럼, 1 ,2)
대상이 되는 컬럼 != NULL -> 1
대상이 되는 컬럼 == NULL -> 2
*/
SELECT EMPLOYEE_ID, MANAGER_ID,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;
SELECT EMPLOYEE_ID, NVL(MANAGER_ID,0),DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;
SELECT EMPLOYEE_ID, NVL2(MANAGER_ID,'있음','없음'),DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;