SELECT
과일로 만든 아이스크림 고르기(Lv1)
문제 설명
문제
상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.
풀이
SELECT로 FLAVOR을 선택
JOIN에서 FLAVOR로 두 테이블을 inner join
WHERE문에서 주 성분이 과일이고 총 주문량이 3000보다 크게 설정
ORDER BY에서 총 주문량을 내림차순 정렬
SELECT I.FLAVOR
FROM ICECREAM_INFO I
JOIN FIRST_HALF F ON F.FLAVOR = I.FLAVOR
WHERE INGREDIENT_TYPE = 'fruit_based'
AND F.TOTAL_ORDER > 3000
ORDER BY F.TOTAL_ORDER DESC
SUM, MAX, MIN
조건에 맞는 아이템들의 가격의 총합 구하기(Lv2)
문제 설명
문제
ITEM_INFO 테이블에서 희귀도가 'LEGEND'인 아이템들의 가격의 총합을 구하는 SQL문을 작성해 주세요. 이때 컬럼명은 'TOTAL_PRICE'로 지정해 주세요.
풀이
SELECT에서 가격의 총합을 TOTAL_PRICE로 설정
WHERE에서 희귀도를 'LEGEND'로 설정
SELECT SUM(PRICE) TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = 'LEGEND';
GROUP BY
카테고리 별 도서 판매량 집계하기(Lv3)
문제 설명
문제
2022년 1월의 카테고리 별 도서 판매량을 합산하고, 카테고리(CATEGORY), 총 판매량(TOTAL_SALES) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 카테고리명을 기준으로 오름차순 정렬해주세요.
풀이
SELECT에서 카테고리, 판매량의 합계인 총 판매량을 조회
JOIN에서 BOOK_ID 칼럼을 기준으로 두 테이블을 INNER JOIN
WHERE에서 2022년 1월로 제한
GROUP BY에서 카테고리를 그룹화
ORDER BY에서 카테고리를 기준으로 오름차순 정렬
SELECT B.CATEGORY, SUM(S.SALES) AS TOTAL_SALES
FROM BOOK AS B
INNER JOIN BOOK_SALES AS S ON B.BOOK_ID = S.BOOK_ID
WHERE S.SALES_DATE LIKE '2022-01%'
GROUP BY B.CATEGORY
ORDER BY B.CATEGORY ASC;
IS NULL
업그레이드 할 수 없는 아이템 구하기(Lv3)
문제 설명
문제
더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요.
풀이
더 이상 업그레이드 할 수 없는 아이템들은 ITEM_TREE 테이블의 PARENT_ITEM_ID에서 언급되지 않는 아이템들이다!
SELECT에서 ITEM_ID, ITEM_NAME, RARITY를 조회
JOIN에서 ITEM_ID를 기준으로 inner join
WHERE에서 서브쿼리로 PARENT_ITEM_ID를 뽑는데 T.PARENT_ITEM_ID IS NOT NULL을 설정
(NULL인 PARENT_ITEM_ID를 제외하기 위해서임)
해당 서브쿼리에 해당하지 않는 ITEM_ID로 설정!
ORDER BY에서 아이템 ID를 기준으로 내림차순 정렬
SELECT I.ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO I
JOIN ITEM_TREE T ON T.ITEM_ID = I.ITEM_ID
WHERE I.ITEM_ID NOT IN (
SELECT PARENT_ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IS NOT NULL
)
ORDER BY I.ITEM_ID DESC;
JOIN
있었는데요 없었습니다(Lv3)
문제 설명
문제
관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
풀이
SELECT에서 ANIMAL_ID, NAME을 조회
JOIN에서 ANIMAL_ID를 기준으로 두 테이블을 inner join
WHERE에서 보호 시작일보다 입양일이 더 빠르게 설정(→보호 시작일이 입양일보다 크다!)
ORDER BY에서 보호 시작일을 오름차순 정렬(보호 시작일이 빠른순)
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME;
String, Date
대여기록이 존재하는 자동차 리스트 구하기(Lv3)
문제 설명
문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.
풀이
SELECT에서 CAR_ID에 DISTINCT로 중복이 없는 자동차ID를 조회
JOIN에서 CAR_ID를 기준으로 두 테이블을 inner join
WHERE에서 자동차 종류가 '세단'이면서 시작날짜가 22년 10월로 제한
ORDER BY에서 자동차 ID를 기준으로 내림차순 정렬
SELECT DISTINCT(C.CAR_ID) CAR_ID
FROM CAR_RENTAL_COMPANY_CAR C
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY R ON C.CAR_ID = R.CAR_ID
WHERE CAR_TYPE = '세단'
AND R.START_DATE LIKE '2022-10%'
ORDER BY C.CAR_ID DESC;
'SQL > 프로그래머스' 카테고리의 다른 글
프로그래머스 | SQL 스터디 9 (1) | 2024.09.03 |
---|---|
프로그래머스 | SQL 스터디 8 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 6 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 5 (0) | 2024.09.03 |
프로그래머스 | SQL 스터디 4 (1) | 2024.09.03 |