<목차>
ㅇ 실습문제 18번~
ㅇ 17번
: 자신의 매니저보다 먼저 고용된 사원들의 이름 및 고용일 출력
( 수업시간에 안하고 혼자 풀었는데, ppt파일 보니 대강 맞는 듯)
아이디어)
SELECT e.last_name, e.hire_date FROM employees e, employees m WHERE e.manager_id = m.employee_id AND e.hire_date < m.hire_date
ㅇ 18번
: 회사 전체의 최대 급여, 최소 급여, 급여 총 합 및 평균 급여 출력
SELECT MAX(salary), MIN(salary), SUM(salary), AVG(salary) FROM employees
ㅇ 19번
: 각 직업별 최대 급여, 최소 급여, 총 합 및 평균 급여를 출력
단, 최대 급여는 MAX, 최소 급여는 MIN, 급여 총합은 SUM, 평균 급여는 AVG로 출력, 직업 기준 오름차순 정렬
SELECT job_id, MAX(salary) MAX, MIN(salary) MIN, SUM(salary) SUM, AVG(salary) AVG FROM employees GROUP BY job_id ORDER BY job_id
ㅇ 20번
: 동일한 직업을 가진 사원들의 총 수
SELECT job_id, COUNT(employee_id) FROM employees GROUP BY job_id
ㅇ 21번
: 매니저로 근무하는 사원들의 총 수 출력
SELECT COUNT(DISTINCT manager_id) FROM employees
아이디어 : 매니저 아이디에 있는 수만 세어서
-> 매니저 아이디를 기준으로 그룹화가 발생
100번 사원에게 관리를 받는 사원이 14명이다
여기 설명 다시 듣기
작성2
카운트(매니저)
널 값을 무시해서 106이 나와
작성3
작성2에다가 관리자 번호 중복되는걸로
(쌤이 나 잘한다고 칭찬해주셨는데,, 이것도 녹화는 안 됐네ㅋㅋ)
20번 21번 연속으로 풀어서 말씀해 주신 듯
너는 어디서 이걸 했니? 잘한다잉
ㅇ 22번
: 사내의 최대 급여 및 최소 급여의 차이를 출력
SELECT MAX(salary)-MIN(salary) FROM employees
ㅇ 23번
: 매니저의 사번 및 그 매니저 밑의 사원들 중 최소 급여 받는 사원의 급여를 출력
SELECT manager_id, MIN(salary) FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary)>=5000 ORDER BY MIN(salary) DESC
cf. 내가 고민했던 부분 매니저아이디이스낫널인 웨어절 필요한가? 매니저 아이디를 그룹바이 할꺼고, 그 매니저 아이디들의 그룹 안에서 샐러리 비교할건데 이 과정에서 널이 이루어지는 것 아닌가??
매니저 밑의 사원
임플로이테이블에서 매니저
셀렉트 매니저아이디, min사원의 급여
프롬
웨어 매니저아이디 없어
그룹바이 매니저아이디
해빙바이 민급여<5000
오더바이 desc
매니저 밑의 사원은 해석을 잘 했어 - 그 매니저 번호를 두고 있는 사원
임플로이아이디/매니저아이디 봐보자
103번에게 관리받는 사원 104 ~ 107번
그 중 최저 급여인 4200을 찾으세요
웨어절에 샐러리가 5000보다 크다 쓴 사람 있어
먼저 웨어절에서 급여 5000미만인 애들 다 제외시켜버린거야.
결과값이 틀려질 수 있어.
오더바이에 샐러리 내림차순 쓴 사람 있어 - 나 ㅋㅋㅋ
셀랙트 리스트에 명시가 된 애들을 정렬하는 거야
이미 민 셀러리로 값 변형시키니가
샐러리라는 컬럼은 나오지 않아.
즉 오더바이절에는 샐러리 쓸 수 없어.
에러난 코드보기
103번 사원 관리 받는 거 - 스크린샷
이렇게 모아서 최저 급여가 5000미만인 사람을 제외하겠다.
ㅇ 24번
부서명, 부서위치아이디, 각 부서 별 사원 총 수, 각 부서 별 평균 급여를 출려하되
부서위치를 오름차순 출력
부서명
부서위치아이디
각 부서별 사원 총 수 - 카운트
각 부서별 평균 급여 - 에버리지샐러리
부서테이블 - 사원테이블 연걸
이러면 카테시안 곱이 생겨
SELECT d.department_name, d.location_id, COUNT(employee_id), AVG(salary) FROM departments d, employees e GROUP BY department_name, location_id ORDER BY location_id
- 조인조건을 넣어줘야지
SELECT d.department_name, d.location_id, COUNT(employee_id), AVG(salary) FROM departments d, employees e WHERE d.department_id=e.department_id GROUP BY department_name, location_id ORDER BY location_id
결과는 똑같이 나와.
질문: 조인 쓰고 나서 그룹함수 사용할 때 어떤 테이블 사용할건지 생각할 필요 없나??
아 어차피 임플로이랑 샐러리는 e테이블에만 있으니까
만약 양쪽 테이블에 다 있는 애들은 꼭 명시해줘야겠지?!!
SELECT d.department_name, d.location_id, COUNT(e.employee_id), AVG(e.salary)
FROM departments d, employees e
WHERE d.department_id=e.department_id
GROUP BY d.department_name, d.location_id
ORDER BY d.location_id
순서
1 셀렉트 리스트 : 부서이름, 부서위치, 사원의 총 수-카운트임플로이, 평균급어-에버리지샐러리
2 프럼절 : 앞의 2개는 디파트먼트테이블과 , 뒤의 2개는 임플로이테이블이 필요해 => 조인
조인을 쓰니까 조인조건이 필요해
3 웨어절 : 이큐조인
4 셀렉트리스트절에 그룹함수가 사용되었으니까 그룹화 시켜줘야지
그룹화가 사용되지 않은 모든 컬럼들은 그룹화 해주기
그룹바이절 : 디.디아읻.
SELECT d.department_name, d.location_id, COUNT(e.employee_id), AVG(e.salary)
FROM departments d, employees e
WHERE d.department_id=e.department_id
GROUP BY department_name, location_id
ORDER BY location_id
프럼절에서 알리아스 썼으면 다른 곳에 다 사용할 수 있어
내일은 이걸 토대로
셀렉트 명령문 마지막 시간 . 셀렉트의 꽃 중의 꽃
내일은 셀렉트 문장 마무리만 하려고해. 새로운 거
새로운 진도 안나가고
서브쿼리 실습까지 진행하면
남은 1시간은 체크해온거 질문 받을거야