멀리 보는 연습

DATABASE_group by, SQL 구문 실행 순서, having 본문

Study/DATABASE

DATABASE_group by, SQL 구문 실행 순서, having

푸실리 2021. 5. 31. 20:09

1. group by 구문

 

부서 별로 그룹화 하여 합계를 보고 싶을 때

1 select department_id, sum(salary)

2 from employees

3* group by department_id

 

부서 별로 그룹화하여 평균을 보고 싶을 때

1 select department_id, avg(salary)

2 from employees

3* group by department_id

 

2. SQL 구문 순서

FROM - WHERE - GRUOP BY - HAVING - SELECT - ORDER BY

SELECT 쿼리문을 실행했을 때, 위의 순서대로 실행

*where 절은 그룹 함수를 쓸 수 없음

 

3. having 구문

조건절에는 where, having 절이 존재하는데,

where 은 '행'을 제한하는 구문이고, having 절은 '그룹'을 제한하는 구문이다.

예를 들면,

where sal > 1000,

having avg(sal) > 1000

 

*예제01

SQL> select job_id, sum(salary) payroll
2 from employees
3 where job_id not like '%rep%'
4 group by job_id
5 having sum(salary)>13000
6 order by job_id;

 

*문제01

회사 전체의 최대 급여, 최소 급여, 급여 총 합 및 평균 급여를 출력하시오.

1 select max(salary), min(salary), sum(salary), avg(salary)
2* from employees

 

*문제02

각 직업별, 최대 급여, 최소 급여, 급여 총합 및 평균 급여를 출력하시오.

단, 최대 급여는 MAX, 최소 급여는 MIN, 급여 총 합은 SUM 및 평균 급여는 AVG로 출력하고 직업을 오름차순으로 정렬하시오.

1 select job_id, max(salary) max, min(salary) min, sum(salary) sum, avg(salary) avg
2 from employees
3 group by job_id
4* order by job_id asc

 

 

*문제03

동일한 직업을 가진 사원들의 총 수를 출력하시오

select job_id, count(employee_id)
from employees
group by job_id

 

select job_id, count(*)
from employees
group by job_id

 

*문제04

매니저로 근무하는 사원들의 총 수를 출력하시오.

1 select count(distinct manager_id)
2* from employees

 

관리자의 수를 물었기 때문에, 중복을 제거한(distinct) 매니저 아이디 수를 조회하면 된다.

 

*문제05

사내의 최대 급여 및 최소 급여의 차이를 출력하시오.

SQL> select max(salary)-min(salary)
2 from employees;

 

*문제06

매니저의 사번 및 그 매니저 밑 사원들 중 최소 급여를 받는 사원의 급여를 출력하시오.

-매니저가 없는 사람들은 제외한다.

-최소 급여가 5000 미만인 경우는 제외한다.

-급여 기준 역순으로 조회한다.

SQL> select manager_id, min(salary)
2 from employees
3 where manager_id is not null
4 having min(salary) >=5000
5 group by manager_id
6 order by min(salary) desc;

 

*문제07

부서명, 부서위치ID, 각 부서 별 사원 총 수, 각 부서 별 평균 급여를 출력하되, 부서 위치를 오름차순으로 출력하시오.

1 select d.department_name, d.location_id, count(employee_id), avg(salary)
2 from employees e, departments d
3 where e.department_id=d.department_id
4 group by d.department_name, d.location_id
5* order by location_id

 

'Study > DATABASE' 카테고리의 다른 글

DATABASE_서브쿼리  (0) 2021.05.31
DATABASE_조인  (0) 2021.05.31
DATABASE_연산자, where, order by, 비교 조건 예제  (0) 2021.05.23
DATABASE_명령문  (0) 2021.05.23
DATABASE_용어  (0) 2021.05.23
Comments