본문 바로가기

2024_풀스택학원/Back-end

[Database] Group by / Having

 
[순서]
SELECT FROM WHERE GROUP BY HAVING ORDER BY



group by
- group 은 특정 칼럼을 기준으로 집계를 내는데 사용된다.
- 형식
SELECT [GROUP BY 절에 지정된 컬럼1][GROUP BY 별로 집계할 값]
FROM [테이블 명]
GROUP BY[그룹으로 묶을 컬럼]


select dept_code, sum(salary)
from employee
group by dept_code;
--> 그룹화 할 경우 그룹화된 정보만 가져올 수 있다.

-- 회사내 직원의 성별 별 인원 수
select
    decode()

having
- Having 절은 Group by로 집계된 값 중 where 절 처럼 특정 조건을 추가
- 형식
SELECT [GROUP BY 절에 지정된 컬럼1][GROUP BY별로 집계할 값]
FROM [테이블 명]
GROUP BY[그룹으로 묶을 컬럼 값]
HAVING [조건 추가];

--부서별 급여 평균을 구했을 때 , 급여 평균이 300만원 이상인 부서의 정보만 출력
select
    dept_code,
    avg(salary)
from employee
where avg(salary)>= 3000000//에러
> 에러나는 이유
1. where 절에는 그룹함수를 사용할 수 없다.
2. 쿼리의 실행 순서 때문
* 쿼리 실행 순서

from -> where(그룹화 이전 데이터 전체에 대하여 적용될 조건)->group by
-> having(그룹화 된 데이터에 대하여 적용될 조건)->select->order by
    - select 에서 만든 alias는 where 절에서 사용할 수 없다.(실행순서 때문에)
    - select 에서 만든 alias는 order by에서는 사용할 수 있다.