DML [7] select - 7) GROUP BY 8) HAVING

uumin_.0115·2024년 8월 12일

DataBase

목록 보기
7/10

7) GROUP BY

💡 SELECT [컬럼,...] FROM [테이블명] GROUP BY [묶어줄 기준 쿨럼]
  • group by 규칙
    1. 어떤 컬럼을 기준으로 묶을지 정해야 함
    2. 기준으로 묶은 컬럼은 연산되어야 함 (합계, 평균, 최소, 최대, 카운트 등)
    3. SELECT 뒤의 컬럼은 기준 컬럼

→ 관련 없는 컬럼이 들어가면 에러를 방지하기 위해 첫번째 값이 나오는데, 의미 없는 값이다


각 팀별 급여 합산 (sum(salary)) 함수 : salary의 전체 합산 구하기)

-- depart_no가 'dev001'인 사원들의 급여 합산은? (조건)
select depart_no, sum(salary) as 급여합계 from employees where depart_no = 'dev001'; 

		-- depart_no, dev001 맞아? 확인하기 위해 select depart_no,
		
 -- depart_no가 'dev002'인 사원들의 급여 합산은? (조건)
select depart_no, sum(salary) as 급여합계 from employees where depart_no = 'dev002';  

 -- depart_no가 'dev003'인 사원들의 급여 합산은? (조건)
select depart_no, sum(salary) as 급여합계 from employees where depart_no = 'dev003';  

-- depart_no가 'dev004'인 사원들의 급여 합산은? (조건)
select depart_no, sum(salary) as 급여합계 from employees where depart_no = 'dev004';  

-- depart_no가 'dev005'인 사원들의 급여 합산은? (조건)
select depart_no, sum(salary) as 급여합계 from employees where depart_no = 'dev005';  

→ 위 내용을 GROUP BY로 정리

select depart_no, sum(salary) as 급여합계 from employees group by depart_no;**

부서별 급여 합산(sum), 연산된 컬럼 외에 다른 컬럼은 나오지 않아야 한다.

ex) 부서별 급여 합산을 구하는 데 직원의 이름 나오면 안됨


연산 (합계 / 평균 / 최대 /최소 / 카운트)

-- 부서별 급여 평균(avg)
select depart_no, avg(salary) as 급여평균 from employees group by depart_no; -- depart_no별로 avg 연산을 할거야 

-- 부서별 최대 급여자(max)
select depart_no, max(salary) as 최대급여자 from employees group by depart_no; -- depart_no별로 max 연산을 할거야 

-- 부서별 최소 급여자(min)
select depart_no, min(salary) as 최소급여자 from employees group by depart_no; -- depart_no별로 min 연산을 할거야 

-- 부서별 급여를 받는 인원 수
select depart_no, count(salary) as 급여자수 from employees group by depart_no; -- depart_no별로 count 연산을 할거야 

08) HAVING

  • GROUP BY 의 조건절
  • 조건을 WHERE로 걸 수 없어서 조건을 HAVING

ex) 팀별 급여 합계가 1000만원 이상인 팀만 노출

select depart_no, sum(salary) from employees group by depart_no having sum(salary) >= 10000000;**
profile
2024.06.20~

0개의 댓글