728x90
그룹함수의 실행 결과는 하나이기 때문에 단순 컬럼과 그룹 함수는 SELECT절에서 동시 사용이 불가능하다. 이 때, GROUP BY
절을 사용하여 단순 컬럼을 그룹으로 묶으면 동시 사용이 가능하다.
GROUP BY 절
GROUP BY는 특정 컬럼값을 기준으로 그룹으로 묶을 때 사용하는 방법이다. 주로 ~별
로 표현된다. (대표적으로 부서별, 성별, 직급별 또는 학년별)
💡 GROUP BY절을 작성할 때 알아야 될 작성 지침
SELECT
절 뒤에 사용할 수 있는 컬럼은GROUP BY
뒤에 작성된 컬럼이거나 그룹함수가 적용된 컬럼만 사용 가능WHERE
절에는 그룹함수를 사용할 수 없다.WHERE
절을 사용하여 행을 그룹으로 그룹핑(Grouping)하기 전에 제외 시킬 수 있다.- 그룹으로 묶은 후 행을 제외 시키려면
HAVING
절을 사용한다 ✨ HAVING절 바로가기 GROUP BY
절 뒤에는 컬럼 별칭(alias) 및 컬럼 순서 위치값을 사용할 수 없다.
-- 부서별 평균 월급 출력
SELECT department_id 부서번호, AVG(salary) 평균월급
FROM employees
GROUP BY department_id
ORDER BY 1;
부서별로 평균 월급을 구하려면 전체 사원을 소속 부서별로 그룹핑해야 된다. GROUP BY
뒤에 부서번호(department_id)를 지정하면 부서별로 그룹핑 되고 AVG
그룹함수에 의해서 평균값을 반환하게 된다
-- 사원 테이블에서 년도별, 월별 월급합계를 출력
SELECT TO_CHAR( hire_date , 'YYYY' ) 년
,TO_CHAR( hire_date , 'MM') 월 , SUM(salary)
FROM employees
GROUP BY TO_CHAR( hire_date , 'YYYY'),
TO_CHAR( hire_date , 'MM')
ORDER BY 년 ASC;
사원들의 입사일에서 년도만 추출하기 위해 TO_CHAR(hire_date,'YYYY')
변환 함수를 사용한다. 함수의 결과인 년도를 그룹으로 묶기 위해 GROUP BY
뒤에 지정하고, 마찬가지로 월을 그룹핑 한다. 실행결과와 마찬가지로 다중 그룹핑이 가능하다.
728x90
'Database > SQL' 카테고리의 다른 글
[Oracle/SQL] Oracle 조인 (0) | 2023.07.28 |
---|---|
[SQL] Having 절 (0) | 2023.07.27 |
[SQL] 그룹 함수 (0) | 2023.07.27 |
[SQL] 단일 행 함수 (Single-Row Funtion) (0) | 2023.07.27 |
[SQL] SQL 함수 개요 (0) | 2023.07.26 |