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;
'DATA > SQL' 카테고리의 다른 글
SQL: Leet code 문제풀이(570, 1934, 620) (0) | 2025.01.23 |
---|---|
SQL풀이: Leetcode 1661. Average Time of Process per Machine (0) | 2025.01.15 |
SQL: LAG 함수 활용하여 현재 데이터와 이전 데이터를 비교 (1) | 2025.01.09 |
241211 SQL 코드카타(조건에 맞는 사용자 정보 조회하기, 조건에 부합하는 중고거래 상태 조회하기, 취소되지 않은 진료 예약 조회하기) (3) | 2024.12.11 |