이번엔 group by 구문에 대해 알아볼 것 이다.
group by는
보통 항목을 그룹으로 묶어서 쿼리 할때 사용한다.
쿼리문으로 얻은 결과를 group by 절에 명시한 사항으로 그룹화하고,
그 그룹에 SQL 집합함수등을 사용해서 다양한 결과를 얻을 수 있다.
group by는
보통 집합함수 avg(), sum(), min(), max() 등과 함께 사용된다.
그룹화 한 경우 그룹함수와 group by에 지정한 컬럼만 사용 가능하다.
avg()는 평균을 구해주는 집함함수이고 ()안에 무엇을 평균을 구해줄것인지 넣어주면 된다.
sum()은 총합을 구하는 함수, min()은 최소를 구하는 함수, max()는 최고를 구하는 함수이다.
집함 함수를 사용하면 같이 보일 열_명도 group by로 묶어주거나 그룹형식에
열이어야 쿼리 문이 오류가 나지 않는다.
예를 들어 쿼리할 때
▪ '홍길동' 사원의 월급만 구한다면,
=>한 사원의 월급을 대상으로 작업하므로 단일 쿼리 salary를 사용하지만
▪ '전체사원의 월급의 합/평균'을 구한다면,
=>전체 사원의 월급을 대상으로 작업하므로 그룹 쿼리로 sum()과 같은 그룹함수를 사용해야 한다.
만일 group by ~ 절에 조건을 준다면
where ~를 사용하지 않고 having ~ 절을 사용한다.
==>HAVING 절은 GROUP BY 절을 통해서 나온 결과에 특정 조건을 줄 때 where ~ 대신 사용한다.
HAVING 절은 GROUP BY 절의 수행 결과를 대상으로 하기 때문에 보통 GROUP BY 절 다음에 나온다.
※having ~ 이 있어도 where ~와 함께 사용할 수 도 있다.
select ~ 절에 반드시 GROUP BY 절에서 사용되는 열_명과 그 형식이 포함되어 있어야 한다.
예를 들어
job_id 별로 총 급여를 구하는데, 급여 기준으로 내림차순으로 보이시오 라는 쿼리를 한다면.
select job_id, sum(salary) from employees
group by job_id;
이런식으로 한다면.

이런식으로 job_id 별로 묶어서 그 부서에 총 급여 합을 나타내준다.
여기서 having 절을 써서 조건을 총급여가 10000이상인 부서만 보여라 라고 준다면
select job_id, sum(salary) from employees
group by job_id
having sum(salary) >=10000;
이런식으로 쿼리 할 수 있다 where 절과 차이는 where 절을 쓴다면 group by 절이 나오기 전에 where 절 을 쓰지만
having 절은 group by 절 다음에 쓰인다. 그래서 조건이 2개일때 group by 절을 쓴다면
where절과 having 절을 둘다 써서 조건을 줄 수도 있다.
결과는

이런식으로 부서별 총급여가 10000이상인 부서만 쿼리되어서 나온다.
'DB > SQLPLUS' 카테고리의 다른 글
| [ORACLE] TRUNC, ROUND 함수 (0) | 2022.06.12 |
|---|---|
| [ORACLE] sqlplus 연산자, Esecape 문자 (0) | 2022.06.12 |
| [oracle] Order by 구문 (0) | 2022.06.12 |
| [Oracle] between A and B, in(A, B) 구문 (0) | 2022.06.09 |
| [Oracle] SQL *plus 기본문 (0) | 2022.06.06 |
댓글