수강한 강의
Part 4. SQL
Chapter 04 문제풀이
- 분기문(case-when)
- 집합 연산(union)
- 집합 연산(union all)
- 서브 쿼리(column)
- 서브 쿼리(from)
- 서브 쿼리(where)
학습 후기
1. case when 문제
판매 가능한 제품들의 재고 파악을 위해 2020년 2월에 생산된 문구류 제품들의 제품명과 제품들의 총생산량을 출력하시오. (제품 코드는 001 가위, 002 풀, 003 공책, 004 볼펜, 005 지우개이다.)
위 문제를 보고 일단 제품명끼리 묶어 총생산량을 구해야 하므로 group by 제품 코드를 사용하고, 제품명을 나타내기 위해 case when을 통해 제품 코드에 따라 제품명을 매치해 주어 쿼리에 나타낸다.
select
case inumber
when 'I1001' then '가위'
when 'I1002' then '풀'
when 'I1003' then '공책'
when 'I1004' then '볼펜'
when 'I1005' then '지우개'
end as inumber
, sum(pcount)
from
tproduction
where
to_char(pdate, 'YYYYMMDD') like '202002%'
and inumber like 'I100%'
group by
inumber;
2. union 문제
제품이 한 번이라도 주문되었거나, 반품이 한 번이라도 발생한 월의 정보를 중복을 제거하고 출력하시오.
일단 주문 테이블과 반품 테이블이 따로 있기에 중복 제거를 사용하여 두 테이블을 합치려면 union을 사용한다.
또 월만 출력하면 되기 때문에 각 테이블에 날짜 데이터에서 월 만 가지고 group by 하여 표시한다.
select
to_char(odate, 'MM')
from
torder
group by
to_char(odate, 'MM')
union
select
to_char(rdate, 'MM')
from
treturn
group by
to_char(rdate, 'MM');
3. union all 문제
여태까지 회사에 입사했던 사람들의 총 인원 수와 연도별 입사한 직원 수를 출력하시오.
입사했던 사람들의 총인원수는 직원 테이블의 총 수를 count를 사용하여 구하고, 연도별로 입사한 직원 수를 알기 위해 입사일을 연도별로 group by 하고 직원수를 count 하여 두 테이블의 결과를 union all로 한꺼번에 출력한다.
select
'총 인원수' as year,
count(*)
from
temployee
union all
select
to_char(startdate, 'YYYY') as year,
count(*)
from
temployee
group by
to_char(startdate, 'YYYY')
order by
year;
4. from절에 있는 서브 쿼리
20년 01월 01일부터 20년 12월 31일까지 생산된 제품들의 제품 코드와 총생산량을 총생산량이 많은 순서대로 출력하시오.
일단 where 절에 기간을 필터 하고 제품 코드로 group by 하여 총생산량을 제품 코드 별로 sum 해서 나온 결과 테이블을 총 생산량 순으로 다시 정렬하여 출력한다.
select
t.inumber,
t.pcount
from
(
select
inumber,
sum(pcount) as pcount
from
tproduction
where
to_char(pdate, 'YYYY') = '2020'
group by
inumber) t
order by
t.pcount desc;
수강 인증샷
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'공부 > 패스트 캠퍼스 챌린지' 카테고리의 다른 글
코딩테스트 - 패스트캠퍼스 챌린지 46일차 (0) | 2022.03.10 |
---|---|
코딩테스트 - 패스트캠퍼스 챌린지 45일차 (0) | 2022.03.09 |
코딩테스트 - 패스트캠퍼스 챌린지 43일차 (0) | 2022.03.07 |
코딩테스트 - 패스트캠퍼스 챌린지 42일차 (0) | 2022.03.06 |
코딩테스트 - 패스트캠퍼스 챌린지 41일차 (0) | 2022.03.05 |