참고
https://lucy-the-marketer.kr/ko/growth/sql-group-by-and-having/
SQL (5) 그룹 함수(GROUP BY)와 HAVING문
지난 글에서 다룬 집계 함수(Aggregations)에서 더 나아가보자. 이번 글에서는 그룹 함수와 HAVING문을 이용해보자. ■ GROUP BY Group by로 그룹화한다는 건 무슨 뜻일까? 어떤 열을 지정하여 그룹화한다
lucy-the-marketer.kr
그룹함수
특정 컬럼을 기준으로 그룹화하여 테이블의 행들을 집계할 수 있게 하는 함수
그룹화
동물 |
개 |
개 |
고양이 |
↓
동물 |
개 |
고양이 |
그룹의 기준이 되는 컬럼은 GROUP BY 로 선택
TEST_TABLE
name | score | class |
비비안나 | 10 | A |
드봉 | 20 | A |
가르송 | 30 | B |
SELECT class, avg(score) AS avg_score
FROM TEST_TABLE
GROUP BY class;
score | class |
15 | A |
30 | B |
GROUP BY 이용 시 해당 그룹의 sum(), avg(), count() 구하기 가능
( DISTINCT와의 차이 = 집계함수의 사용 여부 )
집계함수
SUM(col) | 해당 컬럼의 총합 |
AVG(col) | 해당 컬럼의 평균 |
MAX(col) | 해당 컬럼의 최대값 |
MIN(col) | 해당 컬럼의 최소값 |
COUNT(col) | 해당 컬럼의 개수 COUNT()는 NULL 을 세지 않음 주의 |
GROUP BY에 지정한 컬럼 이외의 컬럼을 SELECT할 때는 반드시 집계함수를 사용
(그룹함수의 결과는 일반 컬럼과 함께 출력할 수 없음. 위의 테이블에서 name을 같이 SELECT 할 수 없단 뜻)
WHERE 과 HAVING
WHERE | HAVING |
그룹화 되지 않은 데이터 필터링 | 그룹화 된 데이터 필터링 |
SELECT class, AVG(score) AS avg_score
FROM TEST_TABLE
GROUP BY class
HAVING AVG(score) >= 20;
+)
ORDER BY 위치
ORDER BY는 제일 마지막에 추가
집계함수는 WHERE 문의 조건식에서 사용 불가
WHERE문으로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 먼저 실행되기 때문
내부적인 처리 순서
WHERE > GROUP BY > HAVING > SELECT > ORDER BY
집계 함수 예시
모든 사원들의 급여 총합
SELECT SUM(salary) FROM employees;
모든 사원들 중 급여를 받는 사원들의 인원수
SELECT COUNT(salary) FROM employees;
커미션을 받는 사원 수 count()는 null값을 세지 않는다!
SELECT COUNT(commission_pct) FROM employees;
모든 사원의 수
SELECT COUNT(*) FROM eployees;
집계함수 + 그룹함수 적용했을 때
SELECT job_id, sum(salary) AS "직책별 급여 통합" FROM employees GROUP BY job_id;
부서별 (GROUP BY) 커미션 받는 사원수 count(commission_pct)
SELECT department_id, count(commission_pct) FROM employees GROUP BY department_id;
부서별 (GROUP BY) 월급 평균 avg(salary)
SELECT department_id, avg(salary) FROM employees GROUP BY department_id;
연습 1: 각 부서별 가장 최근의 입사일과 가장 오래된 입사일
SELECT
department_id,
max(hire_date) "막내",
min(hire_date) "최고참"
FROM employees
GROUP BY department_id;
연습 2: 각 직책별 평균 연봉을 구해보세요(월급 말고 연봉)
SELECT
job_id "직책",
avg(salary * 12) "평균연봉"
FROM employees
GROUP BY job_id;
'Database' 카테고리의 다른 글
【JOIN】키 KEY , 크로스 조인 CROSS JOIN , 이퀴조인 EQUI JOIN (0) | 2022.05.27 |
---|---|
정렬 (0) | 2022.05.27 |
집합 (0) | 2022.05.26 |
~ Oracle SQL Developer 각종 명령어 및 단축키모음 ~ (0) | 2022.05.26 |
DECODE (조건사용x) , CASE (조건사용ㅇ) (0) | 2022.05.26 |