본문 바로가기
[ Developer ]/Oracle SQL

[SQL] GROUP BY 그룹함수 쿼리 사용하기

by 김현섭. 2016. 5. 10.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
SQL - GROUP BY

#SELECT 그룹함수
  • 데이터의 요약이 필요할 때 사용된다
    • Row의 수
    • 특정 컬럼 값 중 가장 큰 수
    • 특정 컬럼 값 중 가장 작은 수
    • 특정 컬럼 값 중 평균 값
    • 특정 칼럼 값의 합계
SELECT [COLUMN], [COLUMN], [...]
FROM [TABLE]
WHERE [CONDITIONS]
GROUP BY [COULUMN], [COULUMN], [...]


만약에 조건에서 그룹 별로 보고 싶다면
GROUP BY를 작성해 준다



그럼 결과는 위에서 배운 DISTINCT와 결과 값이 똑같다
하지만 차이점은 DISTINCT는 집계를 구할 수 없지만 GROUP BY는 집계를 구할 수 있다


# GROUP BY로 집계
GROUP BY의 장점으로는 집계를 구할 수 있다고 배웠다
집계를 하려면 COUNT ( 집계할 컬럼) ) 으로 추가해주면 된다


그러면 결과는 위와 같이 그룹 별로 집계가 된다

GROUP BY는 무엇으로 그룹이 나눠질지만 잘 파악하면 된다
GROUP BY 다음에 올 컬럼

# 집계 함수
집계 함수는 개수를 알아내는 함수이다
단독적으로 전체적인 데이터에서 카운팅을 진행할 수 있지만
그룹별로 구하고 싶다면 GROUP BY를 사용해야 한다


그룹 별 집계를 하고 싶다면
알고자 하는 컬럼을 검색하고
그 컬럼을 그룹짓는다




이것을 응용하여 부서장 별 부하 직원의 수를 구해봤다


그룹 지을 컬럼을 정하고 그 그룹 별로 카운팅할 컬럼을 선택하여
그룹 집계를 한다

부서장과 부서별 집계를 하고 싶다면
SELECT  MANAGER_ID, DEPARTMENT_ID로 셀렉을 하고
GROUP BY 에서 MANAGER_ID, DEPARTMENT_ID로 그룹을 지어 주면 된다

# SQL 그룹함수
SQL의 그룹 함수는 다음과 같다


이것을 응용해서 전체 사원 중 가장 높은 연봉과 낮은 연봉
전체 연봉의 합, 전체 연봉의 평균을 구한다



그룹 함수를 이용해서 응용을 한다면
부서 별 최대 연봉, 최소 연봉, 연봉의 합, 연봉의
평균을 구할 수 있다


평균의 소수점을 지우고 싶다면
ROUND(AVG(SALARY))로 묶어 주면 된다

# 집계함수 비교
집계함수 비교는 WHERE절이 허용 안되고 HAVING절을 사용해야 한다

# GROUP BY에 대한 조건 (HAVING)
특정 값에 대한 집계를 하고 싶으면 조건을 넣어야 한다
GROUP BY에서 그룹 별로 그룹을 만들고
HAVING을 통해서 특정값만 집계할 수 있다