본문 바로가기

배우기/복습노트[oracle sql]

[실습문제] 2023. 11. 7.(화) 문제 풀이(3문제)

728x90
반응형

실습문제 1. 

[ 1. 문제 설명 ]
employee 테이블은 보험 회사 직원의 정보를 담고 있는 테이블입니다.
employee 테이블 구조는 다음과 같습니다.

name        type          nullable      설명
id          number          FALSE     직원아이디
name        varchar         FALSE     이름
salary      number          FALSE     월급
branch_id   number          FALSE     근무 대리점 아이디

sellings 테이블은 자동차 보험 판매 기록을 담고 있는 테이블입니다.
테이블 구조는 다음과 같습니다.

name                 type        nullable      설명
car_id              number        FALSE     보험 대상 자동차 ID
employee_name       number        FALSE     보험 설계사 사원 ID
created_at          date          FALSE     계약일
price   int         number        FALSE     보험료

employee 테이블과 sellings 테이블을 이용하여 대리점별로 보험을 몇 건이나 성사했는지 조회하는 SQL문을 작성.

 

간단히 해결하였다. 여기서 주의할 점은 count에 들어갈 컬럼이다. 일대다 관계일 경우 count는 없을 수도 있는 쪽을 파악하여야 한다.

 

잘못된 count 예제를 살펴보자.

만약 A 직원이 B 지점에 속해있는데 거래 건수가 한 건도 없다면?

B 지점에는 A직원만 소속되어있다고 가정하며 B 지점 count 결과가 0이 나와야 한다.

 

먼저 새로운 직원을 입력해보자

 

 

count에 e 테이블 컬럼을 불러오면 직원 한 명을 세어버리니 거래 건수가 0인 것을 출력해내지 못했다.

 

 

이렇게 출력해야 거래건수가 0인 것이 출력된다. 특히 count에 무조건 count(*) 하지 말 것에 대해 주의하여야 한다.

 

 

실습문제 2.

[ 2. 문제 설명 ]
places 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다.
테이블 구조는 다음과 같습니다.

name        type           설명
id          number         공간아이디
name        varchar        이름
host_name   varchar        공간소유자 유저명

place_reviews 테이블은 공간을 임대한 사람이 남긴 후기를 담은 테이블입니다.
구조는 다음과 같습니다.

name            type           설명
id              number         게시글아이디(기본키)
place_id        number         공간아이디
create_at       date           후기남긴날짜
reviewer_id     number         후기남긴유저아이디
comments        varchar        후기내용

임대 서비스에서는 후기가 하나도 안 달린 공간, 50개 미만인 공간, 100개 미만인 공간,
100개 이상인 공간을 각각 몇 개인지 구하려 합니다.
공간 별로 후기가 몇 개인지 조회하는 SQL문을 작성.
이때 후기가 하나도 안 달린 공간은 0, 50개 미만인 공간은 < 50, 
100개 미만인 공간은 < 100, 100개 이상인 공간이 >= 100으로 표시해야 합니다.
또한 결과는 후기수가 작은 순서대로 보여주세요.

 

 

먼저 내가 풀이한 결과이다.

 

먼저 각 공간별로 후기수에 대하여 늘어놓았다.

그 다음에 아래와 같이 공간 후기수를 group by하여 공간 후기수에 따른 공간 개수를 count 하였다.

 

여기서 내가 놓친 점은 출력할 때 공간 후기 수가 작은 순서대로 출력하여야 하는데, 공간 별로 count한 수가 적은 순서대로 정렬하였다.

선생님은 아래와 같은 단계로 풀이하셨다.

 

 

 

step4에서 정렬할 때 공간순서로 order by하는 방법을 기억해둬야겠다.

 

728x90

 

 

실습문제 3. 

 [ 3. 문제설명 ]
CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. 
CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 
아이디, 장바구니의 아이디, 상품 종류, 가격을 나타냅니다.

데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 
알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 
SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.

 

먼저 내 풀이 결과이다.

 

 

선생님은 두 가지 방법으로 해설해주셨다.

 

sol2 의 경우 가독성이 떨어진다고 하셨고 나도 이 코드가 아직도 이해가 가지 않는다. 이따 학원가서 질문해봐야겠다.

 

나는 self join을 했는데 이 방법은 성능에 좋지 않다고 하셨다. 단일쿼리로 할 수 있다면 단일쿼리로 진행하는 것이 좋다고 말씀하셨다. 최대한 table access를 줄이도록 해보자.

 

 

728x90
반응형