✔ 문제 1. 대여 기록이 존재하는 자동차 리스트
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✔ 문제 풀이
- 조회 : 자동차 id
- 조건1 : 자동차 종류 세단 AND 10월에 대여 시작
- 조건2 : 중복 제거
- 조인
- 정렬 : 자동차id desc
SELECT distinct c.car_id
FROM CAR_RENTAL_COMPANY_CAR c
LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY h
ON c.car_id = h.car_id
WHERE c.car_type = '세단' AND month(h.start_date) = 10
ORDER BY car_id desc;
✔ 문제 2. 모든 레코드 조회하기
동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✔ 문제 풀이
SELECT *
FROM ANIMAL_INS
ORDER BY animal_id
✔ 문제 3. 즐겨찾기가 가장 많은 식당 정보 출력
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✔ 문제 풀이
- 조회 : 음식종류, 식당ID, 식당이름, 즐겨찾기 수
- 그룹 : 음식종류별
- 조건 : 음식종류별 즐겨찾기 수가 가장 많은 식당
- 정렬 : 음식 종류 desc
SELECT ri1.FOOD_TYPE, ri1.REST_ID, ri1.REST_NAME, ri1.FAVORITES
FROM
(select
food_type, rest_id, rest_name, favorites,
row_number() over (partition by food_type order by favorites desc) as rownum
from rest_info
) ri1
where ri1.rownum = 1
order by 1 desc
✔ 문제 4. 식품분류별 가장 비싼 식품의 정보 조회하기
FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✔ 문제 풀이
- 다중컬럼 서브쿼리, IN조건 활용 : WHERE (칼럼1, 칼럼2) IN (칼럼1과 칼럼2로 구성된 테이블)
SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (
SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
)
ORDER BY MAX_PRICE DESC;
참고) 나는 처음에 아래와 같이 풀었고 정답으로 처리가 되었으나, 이 경우 max(price)와 같은 price를 가진 다른 카테고리의 상품이 있다면 정확하지 않은 값이 도출될 수 있을 것 같다. 조건에 카테고리와 가격이 함께 있어야 맞을 듯.
SELECT category
,price AS MAX_PRICE
,product_name
FROM food_product
WHERE category IN ('과자','국','김치','식용유')
AND price in (SELECT max(price) over(partition by category)
from food_product)
ORDER BY 2 DESC
✔ 문제 5. 5월 식품들의 총매출 조회하기
FOOD_PRODUCT와 FOOD_ORDER 테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✔ 문제 풀이
- 조회 : 식품ID, 식품 이름, 총매출
- 조건 : 생산일자 2022년 5월
- 조인 : food_product p, food_order o
- 정렬 : 총매출 desc, 식품ID asc
SELECT p.product_id, p.product_name, p.price*sum(o.amount) as total_sales
FROM food_order o
JOIN food_product p
ON o.product_id = p.product_id
WHERE substr(o.produce_date,1,7) = '2022-05'
GROUP BY 1
ORDER BY 3 desc, 1 ;