공부/패스트 캠퍼스 챌린지

코딩테스트 - 패스트캠퍼스 챌린지 45일차

kNOwAnswer 2022. 3. 9. 23:10

수강한 강의

Part 4. SQL

Chapter 04 문제풀이
- 순위 집계(rank)
- 순위 집계(dense-rank)
- 순위 집계(row-number)
- 조인(inner join)

학습 후기

1. RANK 문제

RANK(): 공동 순위를 같은 등수로 표현하며 다음 순위는 중복된 순위의 수만큼 떨어진다.

ex) 1위가 3명이면 다음 순위는 4위

회사 내 우수직원을 생산량이 많은 직원을 기준으로 하여 상위 10명까지 뽑아 상여금을 주려한다. 
이에 해당하는 직원들의 직원코드와 총생산량을 상위 10명까지 순위를 매겨 출력하시오.
(만약 공동 순위(ex. 공동 1등)가 있다면 다음 순위는 중복된 순위의 수만큼 떨어진다.)

select
    enumber,
    sum(pcount),
    rank() over (order by sum(pcount) desc)
from
    tproduction
group by
    enumber
limit 10;

 

2. ROW_NUMBER 문제

ROW_NUMBER(): 공동 순위가 나오지 않게 출력한다.

ex) 1위가 3명이더라도 1위, 2위, 3위로 표시

현재 판매하는 제품들 중 장롱의 인기가 많아져 판매 가능한 장롱의 재고를 확인하기 위하여
장롱 생산이력을 전부 출력하되 생산량이 높은 순서대로 생산한 직원의 코드와 제품 코드, 생산량을 순위를 매겨
출력하시오.
(공동 순위가 나오지 않게 출력해야 하며 또한 동률일 경우 직원코드(ENumber)가 작은 코드가 우선순위를 가지
도록 한다, 장농의 제품 코드는 I2003번이다

select
    enumber,
    inumber,
    pcount,
    row_number () over (partition by inumber order by pcount desc, enumber)
from
    tproduction
where
    inumber = 'I2003';

 

3. DENSE_RANK 문제

DENSE_RANK(): 공동 순위는 같은 등수로 표현하며 그다음 순위는 공동 순위 다음 번호의 순위가 출력

ex) 1위가 3명이면 다음 순위는 2위

SUBSTRING(컬럼명, 시작 위치, 문자열 개수): 해당 컬럼에서 시작 위치부터 해당 개수의 문자열까지 자른다.

부서별로 연령의 평균을 파악하기 위해서 각 부서마다 속해있는 직원들의 나이로 출생연도를 알아보려 한다.
이를 위해 부서명, 직원명, 출생연도를 출력하되 각 부서의 직원들을 출생연도가 빠른 순으로 순위를 매겨라. 
(공동 순위는 동일하게 부여하고 그다음 순위는 공동 순위 다음 번호로 순위가 출력되어야 하며 출생연도는
tEmplyee의 ERRN의 앞 2자리로 비교하여 출력할 수 있다. D1001 부서는 문구생산부, D2001은 가구생산부, 
D3001은 액세서리생산부, D4001은 전자기기생산부, D5001은 음료생산부이다.)

select
    case
        dnumber
        when 'D1001' then '문구생산부'
        when 'D2001' then '가구생산부'
        when 'D3001' then '엑세서리생산부'
        when 'D4001' then '전자기기생산부'
        when 'D5001' then '음료생산부'
    end as 부서명,
    ename as 직원명,
    substring(errn, 1, 2) as 출생연도,
    dense_rank () over (order by substring(errn, 1, 2))
from
    temployee;

 

4. INNER JOIN 문제

2021년 1월의 전자기기류 판매금 정산을 위해 전자기기류 제품들의 제품명과 해당 제품의 총판매량을 출력하세
요. (전자기기류의 제품 코드는 INumber 번호가 I4로 시작한다.)

select * from torder;
select * from tproduction;
select
    i.iname,
    sum(p.pcount)
from
    torder o
inner join tproduction p on
    o.pnumber = p.pnumber
inner join titem i on
    p.inumber = i.inumber
where
    to_char(o.odate, 'YYYYMM') = '202101'
    and p.inumber like 'I4%'
group by
    i.iname;

 

수강 인증샷

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

반응형