DevSSOM

SQL - 그룹으로 만들기 GROUP BY, 그룹에 조건 걸기 HAVING 본문

DataBase

SQL - 그룹으로 만들기 GROUP BY, 그룹에 조건 걸기 HAVING

데브쏨 2021. 8. 31. 01:20
반응형

GROUP BY

데이터를 그룹화해서 표현하는 명령어.

LIMIT, ORDER BY, GROUP BY는 쿼리 마지막줄에 위치한다.

 

1) 유저별로 몇 권의 책을 빌렸는지 확인하기 위해, rental테이블의 user_id컬럼과 해당 컬럼값에 해당하는 데이터의 수를 차례대로 조회하기

SELECT user_id, COUNT(*)  /* 검색할 컬럼 */
FROM rental
GROUP BY user_id;         /* 그룹의 기준 컬럼*/

 

2) GROUP BY는 다른 내장함수들과 다양하게 조합해서 사용할 수 있음.

SELECT user_id, SUM(컬럼명) FROM rental GROUP BY user_id;
-- user_id가 같은 열에서 컬럼의 내용을 다 더한 값을 출력

SELECT user_id, AVG(컬럼명) FROM rental GROUP BY user_id;
-- user_id가 같은 열의 컬럼의 평균을 출력

SELECT user_id, MAX(컬럼명) FROM rental GROUP BY user_id;
-- user_id가 같은 열에서 해당 컬럼 중 가장 큰 값을 출력

SELECT user_id, MIN(컬럼명) FROM rental GROUP BY user_id;
-- user_id가 같은 열에서 해당 컬럼 중 가장 작은 값을 출력

 

3) salaries테이블에서 GROUP BY문을 이용해 직원별로 몇 번의 연봉을 받았는지 확인해보기. salaries 테이블의 emp_no 컬럼과 해당 컬럼값에 해당하는 데이터의 수를 차례대로 검색

select emp_no, count(*) from salaries group by emp_no;

 

 

 

HAVING

GROUP BY에 조건을 걸기 위해서 HAVING 함수를 함께 사용. 

 

1) rental 테이블에서 user_id가 같은 데이터 중 2개 이상인 데이터가 몇 개 있는지 검색

SELECT user_id, COUNT(*)     /* 검색할 컬럼 */
FROM rental
GROUP BY user_id             /* 그룹의 기준 컬럼 */
HAVING COUNT(user_id) > 1;   /* 조건 */

 

2) salaries 테이블에서 emp_no과 직원별로 연봉을 받은 횟수를 조회하되, 연봉을 10번 이상 받은 직원만 조회하기

select emp_no, count(*)
from salaries
group by emp_no
having count(emp_no) >= 10;

 

 

728x90
반응형
댓글