일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ui
- 스프링
- K디지털크레딧
- 딥러닝
- 코딩
- 내일배움카드
- 코린이
- 문제풀이
- 전주스터디카페
- ux
- 썸머스쿨예약
- java
- 덴디컨설팅
- 스마트인재개발원
- 메시지시스템
- 자바페스티벌
- 서블릿
- 머신러닝
- 전주독서실
- jsp
- 광주직업학교
- 파이썬
- 패스트캠퍼스
- 바이트디그리
- 자바
- iOS개발강의
- 자바스크립트
- 빅데이터
- Python
- 리스트
- Today
- Total
멀리 보는 연습
DATABASE_group by, SQL 구문 실행 순서, having 본문
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 |