1. 사원의 성에서 처음 8자리를 표시하고 급여 액수를 별표로 나타내는 쿼리를 작성한다.
각 별을 1000 달러를 나타낸다. 급여의 내림차순으로 데이터를 출력한다.
RPAD 함수를 이용하면 된다.
우선 substr을 통해 lastname을 8자리로 자른다. => SUBSTR(last_name,1,8)
=> 해당 작업 하지 않아도 rpad에서 처리해준다고 한다.
처음 쓰이는 RPAD를 통해 이름부분을 8자리로 늘리고 => RPAD(last_name, 8, ' ')
두번째 쓰이는 RPAD를 통해 급여만큼 * 을 추가한다. => RPAD(' ', ROUND(salary/1000), '*')
NAME + ' ' |
********************************* |
앞의 8자리 | 급여만큼의 * 개수 |
SELECT RPAD(last_name, 8, ' ') || RPAD(' ',ROUND(salary/1000),'*'), salary
FROM employees;
참고로 rpad 앞쪽에 ''을 쓰면 null로 인식되어 실행되지 않는다.
SELECT RPAD(RPAD(last_name, 8, ' '), 8+ROUND(salary/1000),'*'), salary
FROM employees;
SELECT RPAD(last_name, 8, ' ') || RPAD('*',ROUND(salary/1000)-1,'*'), salary
FROM employees;
2. 사원의 성, 채용날짜, 근무 시작 요일을 표시한다.
월요일부터 시작하여 요일순으로 결과를 정렬하여 출력한다.
DATE 형식의 출력방식 중
'DAY' 형식의 출력은 요일을 FULLNAME으로 표현하고,
'D' 형식의 출력은 요일을 숫자로 표현한다.
일 |
1 |
월 |
2 |
화 |
3 |
수 |
4 |
목 |
5 |
금 |
6 |
토 |
7 |
여기서 월요일부터 출력하기 위해 -1을 해준다.
SELECT last_name, hire_date, to_char(hire_date, 'DAY')
FROM employees
ORDER BY to_char(hire_date-1, 'D');
결과
Ladwig 14-JUL-03 MONDAY
Cambrault 15-OCT-07 MONDAY
Mallin 14-JUN-04 MONDAY
3. 사원의 성이 'n'으로 끝나는 사원의 수를 나타내어라 (두가지)
1. where절의 like를 쓴다.
2. substr을 사용하여 마지막 글자를 추출한다.
SELECT count(*)
FROM employees
where substr(last_name, length(last_name), 1) = 'n'
;
SELECT count(*)
FROM employees
where last_name like '%n'
4. 02-04년도 입사한 사원의 입사년도에 따라 직무별로 총 급여를 표시하여라.
어렵다 이건..
SELECT job_id
, nvl(sum(case when to_char(hire_date,'yyyy') = '2002' then salary end ),0) as "2002"
, nvl(sum(case when to_char(hire_date,'yyyy') = '2003' then salary end ),0) as "2003"
, nvl(sum(case when to_char(hire_date,'yyyy') = '2004' then salary end ),0) as "2004"
FROM employees
where 1=1
and to_char(hire_date,'yyyy') in ('2002','2003','2004')
group by job_id
order by job_id
;
SELECT job_id
, sum(case when to_char(hire_date,'yyyy') = '2002' then salary else 0 end ) as "2002"
, sum(case when to_char(hire_date,'yyyy') = '2003' then salary else 0 end ) as "2003"
, sum(case when to_char(hire_date,'yyyy') = '2004' then salary else 0 end ) as "2004"
FROM employees
where 1=1
and to_char(hire_date,'yyyy') in ('2002','2003','2004')
group by job_id
order by job_id
출력
job_id 2002 2003 2004 2005
AC_ACCOUNT 8300 0 0 0
AC_MGR 12008 0 0 0
AD_ASST 0 4400 0 0
'Develope > 교육' 카테고리의 다른 글
[Oracle] 6일차) 그룹 함수 (UNION ALL, MINUS, INTERSECT ) (0) | 2018.10.05 |
---|---|
[Oracle] 5일차 ) JOIN, 서브쿼리, ROWNUM (1) | 2018.10.04 |
[Oracle] 3일차) 그룹함수 (0) | 2018.10.02 |
[Oracle] 교육 2일차 - NVL, DECODE, CASE (0) | 2018.10.01 |
[Oracle] 교육 2일차 - 형변환 (0) | 2018.10.01 |