Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[6주차] 19. group by 사용법(그룹함수와 같이 조회되는 일반 컬럼이 존재하는 경우)*** 본문

K-DigitalTraining 강의/2. Oracle + PLSQL

[6주차] 19. group by 사용법(그룹함수와 같이 조회되는 일반 컬럼이 존재하는 경우)***

이대곤 2022. 6. 14. 16:11

* select 뒤 필드 목록에 그룹함수만 오는게 아니라 일반 컬럼까지 같이 나온다면, 이 일반 컬럼은 모두 group 을 묶어줘야 한다.

   그룹함수란? https://ldgeao99-developer.tistory.com/206?category=1079113 

* where는 from 바로 다음에, group by는 where 다음에, order by는 group by 뒤에 위치해야 한다.

-- 그룹함수와 조회되는 필드가 1개 인 경우
select gender, count(*) 인원수
from members
group by gender;                        -- gender가 같은 행을 하나로 합쳐 표현하라는 의미

GENDER     인원수
------ ----------
여              4
남              6

-- 그룹함수와 조회되는 필드가 2개 인 경우
select gender, depart, count(*) 인원수
from members
group by gender, depart;                -- gender와 depart 가 같은 행을 하나로 합쳐 표현하라는 의미

GENDER DEPART         인원수
------ ---------- ----------
여     영업부              2
남     홍보부              1
여     개발부              1
여     홍보부              1
남     영업부              3
남     개발부              2

select gender, depart, count(*) 인원수
from members where gender ='여'
group by gender, depart;                -- gender와 depart 가 같은 행을 하나로 합쳐 표현하라는 의미

GENDER DEPART         인원수
------ ---------- ----------
여     영업부              2
여     개발부              1
여     홍보부              1
select depart
from members
group by depart;

DEPART 
-------
영업부   
개발부       
홍보부

--위와 결과가 같음
select distinct(depart)
from members;

--위와 결과가 같음
select distinct depart
from members;

DEPART 
-------
영업부   
개발부       
홍보부

--부서별 연봉의 평균구하기
 select depart, avg(salary) 
 from members
 group by depart;

DEPART               AVG(SALARY)
-------------------- -----------
영업부                       480
개발부                466.666667
홍보부                    500100


--급여가 500이상인 레코드를 대상으로 부서별 급여 평균 조회
select depart, avg(salary) from members
where salary >= 500
group by depart;

DEPART     AVG(SALARY)
---------- -----------
영업부      666.666667
개발부             550
홍보부         1000000


--부서별 인원수 구하기
 select depart 부서, count(*) 인원수
 from members
 group by depart;
 
 부서                     인원수
-------------------- ----------
영업부                        5
개발부                        3
홍보부                        2

--성별 별로 인원수, 급여 평균 조회
select gender, count(*), avg(salary)
from members
group by gender;

GENDER   COUNT(*) AVG(SALARY)
------ ---------- -----------
여              4         275
남              6      167150

--부서별 급여평균, 인원수, 급여최고치, 급여최소치
select depart, avg(salary), count(*), max(salary), min(salary)
from members
group by depart;

DEPART               AVG(SALARY)   COUNT(*) MAX(SALARY) MIN(SALARY)
-------------------- ----------- ---------- ----------- -----------
영업부                       480          5         800         100
개발부                466.666667          3         600         300
홍보부                    500100          2     1000000         200

--개발부에 대해서만 급여평균, 인원수, 급여최고치, 급여최소치
select depart, avg(salary), count(*), max(salary), min(salary)
from members
where depart = '개발부'
group by depart;

DEPART               AVG(SALARY)   COUNT(*) MAX(SALARY) MIN(SALARY)
-------------------- ----------- ---------- ----------- -----------
영업부                       480          5         800         100
개발부                466.666667          3         600         300
홍보부                    500100          2     1000000         200

select depart, avg(salary), count(*), max(salary), min(salary)
from members
where depart = '개발부'
group by depart
order by depart asc;

 

Comments