오라클 어려웠던 문제

최주영·2023년 4월 4일
0

오라클

목록 보기
9/22


이 문제는 문자열 처리 함수를 적절히 사용해서 풀어야 한다는 것을 알곤 있었지만... 너무 어려웠다

SELECT EMP_NAME, RPAD(SUBSTR(EMP_NO,1,INSTR(EMP_NO,'-')),LENGTH(EMP_NO),'*')
FROM EMPLOYEE;
// RPAD 함수로 첫번째 넣을 인수는 주민등록번호에서 - 까지의 모든 값들을 넣었으며
// 두번 째 인수는 최대 길이로, 해당 주민등록번호의 길이를 넣었다.
// 즉 두번째 인수에 있는 길이에서 해당 -까지의 문자들만 들어갔으며, 나머지 - 뒤에 있는 값들은 *로 대체하게 만듬

-- 24번문제
-- EMPLOYEE테이블에서 부서코드가 D5인 직원의 보너스 포함 연봉 합 조회
-- 보너스 NULL인 부분을 어떻게 계산해야할지 고민했었음...

SELECT SUM(SALARY*12*(1+NVL(BONUS,0)))   --  NVL()함수를 이용하여 NULL인 부분을 0으로 대체하였음!
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING DEPT_CODE = 'D5'; 

05_BS_JOIN 11번 문제
11. 부서 별 급여 합계가 전체 급여 총 합의 20%보다 많은 부서의 부서 명, 부서 별 급여 합계 조회

WITH EXAMPLE AS    // 우선 WITH로 가상 테이블을 만들어준다 
(                  // EXAMPLE 테이블은 EMPLOYEE와 DEPARTMENT 테이블을 조인한 상태이다
    SELECT E.SALARY, D.DEPT_TITLE, (SELECT SUM(SALARY) FROM EMPLOYEE )AS SL
    FROM EMPLOYEE E // 이 EXAMPLE 가상테이블을 불러올때 E.SALARY, D.DEPT_TITLE, 합계갑을 사용할 수 있다 
     JOIN DEPARTMENT D ON DEPT_ID = E. DEPT_CODE
)

SELECT DEPT_TITLE, SUM(SALARY) FROM EXAMPLE
GROUP BY DEPT_TITLE, SL // HAVING절 사용하기 위해서 SL도 같이 묶어줌
HAVING SUM(SALARY) > SL*0.2;
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글