본문 바로가기

DATA/SQL

SQL 코드카타 풀이(없어진 기록 찾기, 과일로 만든 아이스크림 고르기, 재구매가 일어난 상품과 회원 구하기)

1. 없어진 기록찾기 

❓문제

#입양을 간 기록은 있는데 보호소에 돌아온 기록이 없는 동물의 ID와 이름을 조회하라. 

 

🅰️풀이방법

# 두 테이블을 비교하여 없는 값을 찾아내고자 함. 

# LEFT JOIN 두 테이블을 비교했을 때, 왼쪽에 있는 데이터는 무조건 가져오지만, 오른쪽에 오는 테이블은 조건에 맞는 데이터가 없을 시에 NULL로 표시한다. 

❗참고로, LEFT OUTER JOIN과 LEFT JOIN은 동일 / JOIN과 INNER JOIN도 동일

 

#입양을 간 기록은 존재한다고 했으므로, ANIMAL_OUTS 데이터를 왼쪽에 배치하여 모든 값이 무조건 나오게 해야 한다.

SELECT O.ANIMAL_ID,
       O.NAME
FROM ANIMAL_OUTS AS O
     LEFT JOIN ANIMAL_INS AS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL 
ORDER BY O.ANIMAL_ID

 

🎯LEFT JOIN 참고

 

 

2. 과일로 만든 아이스크림 고르기 

 

 

🅰️풀이방법

  • #SELECT: ICECREAM_INFO테이블의 FLAVOR
  • #FROM JOIN을 통해 두 테이블을 FLAVOR 컬럼으로 연결
    #WHERE: 상반기의 아이스크림 총주문량이 TOTAL_ORDER>=3000 AND INGREDIENT_TYPE LIKE '%fruit_based%'
  • 두 개의 조건이 있으므로, WHERE절에서 AND로 연결해준다. 
    #ORDER BY: 총주문량이 큰 순서대로 내림차순 정렬
SELECT I.FLAVOR
FROM ICECREAM_INFO AS I 
     JOIN FIRST_HALF AS F ON I.FLAVOR = F.FLAVOR
WHERE F.TOTAL_ORDER >3000 AND I.INGREDIENT_TYPE LIKE '%fruit_based%'
ORDER BY F.TOTAL_ORDER DESC;

 

 

 

3. 재구매가 일어난 상품과 회원 구하기

 

 

🅰️풀이방법

# 추출할 값: USER_ID, PRODUCT_ID

#  GROUP BY 함수로 동일한 회원과 상품 별로 묶일 수 있도록 USER_ID와 PRODUCT_ID를 그룹별로 묶어준다. 

#  GROUP BY 된 값에 조건을 걸어야 하므로 HAVING을 사용하여 1보다 큰 경우를 찾아준다. (재구매이기 때문에 1회 보다 많아야 함) 

#  문제에 주어진대로 USER_ID로 오름차순, PRODUCT_ID로 내림차순 하여 정렬

SELECT USER_ID,
       PRODUCT_ID
FROM ONLINE_SALE 
GROUP BY 1, 2
HAVING COUNT(PRODUCT_ID) > 1 
ORDER BY USER_ID ASC, PRODUCT_ID DESC;