🚩이름 길이별 정렬 1
-- 1. 전체 이름(first_name + last_name)이 가장 긴 -> 짧은 사람 순으로 정렬해서 가져오기
-- > 컬럼 리스트 > fullname(first_name + last_name), length(fullname)
나의 풀이
SELECT
FIRST_NAME,
LAST_NAME
FROM employees
GROUP BY LENGTH(FIRST_NAME || LAST_NAME), FIRST_NAME, LAST_NAME
ORDER BY LENGTH(FIRST_NAME || LAST_NAME) DESC;
정답
select
first_name || ' ' || last_name as fullname, length(first_name || ' ' || last_name) as namelength
from employees
order by namelength asc;
🚩이름 길이별 정렬 2
-- 2. 전체 이름(first_name + last_name)이 가장 긴 사람은 몇글자? 가장 짧은 사람은 몇글자? 평균 몇글자?
-- > 컬럼 리스트 > 숫자 3개 컬럼
나의 풀이
SELECT
max(LENGTH(FIRST_NAME
|| LAST_NAME)),
min(LENGTH(FIRST_NAME || LAST_NAME)),
round(avg(LENGTH(FIRST_NAME || LAST_NAME)))
FROM employees;
정답
select
max(length(first_name || last_name)) as maxlength, min(length(first_name || last_name)) as minlength,
round(avg(length(first_name || last_name))) as avglength
from employees;
🚩이름별 정렬
-- 3. last_name이 4자인 사람들의 first_name을 가져오기
-- > 컬럼 리스트 > first_name, last_name
-- > 정렬(first_name, 오름차순)
나의 풀이
SELECT
first_name
FROM EMPLOYEES
GROUP BY LENGTH(last_name), first_name
HAVING LENGTH(last_name) = 4
ORDER BY first_name ASC;
정답
select
first_name, last_name
from employees
where length(last_name) = 4 order by length(first_name) asc;
🚩직위별 정렬
-- 4. tblInsa. 부장 몇명? 과장 몇명? 대리 몇명? 사원 몇명?
나의 풀이
SELECT
jikwi AS 직위,
count(*) AS 직원수
FROM tblInsa
GROUP BY jikwi;
정답
select
count(decode(jikwi, '부장', 1)),
count(decode(jikwi, '과장', 1)),
count(decode(jikwi, '대리', 1)),
count(decode(jikwi, '사원', 1))
from tblInsa;
🚩간부 사원 정렬
-- 5. tblInsa. 간부(부장, 과장) 몇명? 사원(대리, 사원) 몇명?
나의 풀이
SELECT
CASE
WHEN jikwi IN ('부장', '과장') THEN '간부'
WHEN jikwi IN ('대리', '사원') THEN '사원'
END AS 직위,
COUNT(*) AS 직원수
FROM tblInsa
GROUP BY
CASE
WHEN jikwi IN ('부장', '과장') THEN '간부'
WHEN jikwi IN ('대리', '사원') THEN '사원'
END;
원래의 열 이름을 그대로 사용하여 그룹하였다.
정답
select
count(decode(jikwi, '부장', 1)) + count(decode(jikwi, '과장', 1)) as 간부,
count(decode(jikwi, '대리', 1)) + count(decode(jikwi, '사원', 1)) as 사원
from tblInsa;
select
count(decode(jikwi, '부장', 1, '과장', 2)) as 간부,
count(decode(jikwi, '대리', 3, '사원', 4)) as 사원
from tblInsa;
🚩부서별 정렬
-- 6. tblInsa. 기획부, 영업부, 총무부, 개발부의 각각 평균 급여?
나의 풀이
SELECT
buseo AS 부서,
round(avg(basicpay)) AS 평균급여
FROM tblInsa
GROUP BY buseo
HAVING buseo IN ('기획부', '영업부', '총무부', '개발부');
정답
select
count(decode(buseo, '기획부', 1)) as 기획부,
count(decode(buseo, '영업부', 1)) as 영업부,
count(decode(buseo, '총무부', 1)) as 총무부,
count(decode(buseo, '개발부', 1)) as 개발부
from tblInsa;
select
decode(buseo, '기획부', basicpay) as 기획부,
decode(buseo, '영업부', basicpay) as 영업부,
decode(buseo, '총무부', basicpay) as 총무부,
decode(buseo, '개발부', basicpay) as 개발부
from tblInsa;
select
round(avg(decode(buseo, '기획부', basicpay))) as 기획부,
round(avg(decode(buseo, '영업부', basicpay))) as 영업부,
round(avg(decode(buseo, '총무부', basicpay))) as 총무부,
round(avg(decode(buseo, '개발부', basicpay))) as 개발부
from tblInsa;
🚩남자 여자 나이
-- 7. tblInsa. 남자 직원 가장 나이가 많은 사람이 몇년도 태생? 여자 직원 가장 나이가 어린 사람이 몇년도 태생?
나의 풀이
SELECT
max(CASE WHEN
SSN LIKE '%-1%' THEN substr(ssn, 1, 2)
END) AS 최대나이남자출생년도,
min(CASE WHEN SSN LIKE '%-2%' THEN substr(ssn, 1, 2)
END) AS 최소나이여자출생년도
FROM tblInsa
WHERE SSN LIKE '%-1%' OR SSN LIKE '%-2%';
정답
select
'19' || min(decode(substr(ssn, 8, 1), '1', substr(ssn, 1, 2))),
'19' || max(decode(substr(ssn, 8, 1), '2', substr(ssn, 1, 2)))
from tblInsa;