46. 대여 기록이 존재하는 자동차 리스트 구하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/157341

정답 코드:

SELECT DISTINCT cc.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR cc
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY ch
    ON cc.CAR_ID = ch.CAR_ID
WHERE cc.CAR_TYPE = '세단'
  AND MONTH(ch.START_DATE) = 10
ORDER BY cc.CAR_ID DESC;

문제 풀이때 했던 생각.

자동차 종류가 '세단'인 자동차들을 먼저 분류
그리고 10월에 대여를 시작한 기록이 있는 자동차 ID 분류
이후 차량 id로 오름차순 정렬


무엇이 잘못되었나?

1. 같은 차량의 id가 중복되어 출력


해결법

1. DISTINCT를 사용해 중복값 제거

 

다음엔 이걸로 풀어보자

서브쿼리문으로 한번 풀어보자 (FROM, WHERE문으로 풀기 가능해보임)

 


 

48. 즐겨찾기가 가장 많은 식당 정보 출력하기

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/131123

정답 코드:

SELECT
    r.FOOD_TYPE,
    r.REST_ID,
    r.REST_NAME,
    r.FAVORITES
FROM REST_INFO r
INNER JOIN (
        SELECT FOOD_TYPE, MAX(FAVORITES) AS MAXFAVORITES
        FROM REST_INFO
        GROUP BY FOOD_TYPE) AS f
    ON r.FOOD_TYPE = f.FOOD_TYPE
    AND r.FAVORITES = f.MAXFAVORITES
ORDER BY FOOD_TYPE DESC

 

문제 풀이때 했던 생각.

처음엔 max(favorites)를 한뒤 food_type를 group by로 묶으려 했으나 REST_ID, REST_NAME이 있기 때문에 오류 발생
때문에  서브쿼리를 자체 조인(Join)으로 사용해 음식 종류별 최대 즐겨찾기 수 계산  


다음엔 이걸로 풀어보자

RANK() 또는 ROW_NUMBER() 같은 윈도우 함수를 활용해 문제 풀어보기

 


49. 식품분류별 가장 비싼 식품의 정보 조회하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131116

정답 코드:

SELECT
    f.CATEGORY,
    f.PRICE AS MAX_PRICE,
    f.PRODUCT_NAME
FROM FOOD_PRODUCT f
INNER JOIN (
    SELECT CATEGORY,
            MAX(PRICE) AS MAX_PRICE
    FROM FOOD_PRODUCT
    GROUP BY CATEGORY) AS mp
ON f.CATEGORY = mp.CATEGORY
    AND f.PRICE = mp.MAX_PRICE
WHERE f.CATEGORY IN ('과자', '국', '김치', '식용유')
ORDER BY PRICE DESC

 

문제 풀이때 했던 생각.

식품분류별로 가격이 제일 비싼 식품을 원하기 때문에 이 문제도 서브쿼리를 만들어서 JOIN
식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력을 원하기 때문에 where in으로 필터링

 

다음엔 이걸로 풀어보자

RANK() 또는 ROW_NUMBER() 같은 윈도우 함수를 활용해 문제 풀어보기

 


50. 5월 식품들의 총매출 조회하기

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/131117

정답 코드:

SELECT
    fp.PRODUCT_ID,
    fp.PRODUCT_NAME,
    SUM(fp.PRICE * fo.AMOUNT) AS TOTAL_SALES
FROM FOOD_PRODUCT  fp
INNER JOIN FOOD_ORDER fo
    ON fp.PRODUCT_ID = fo.PRODUCT_ID
WHERE fo.PRODUCE_DATE >= '2022-05-01'
  AND fo.PRODUCE_DATE <  '2022-06-01'
GROUP BY fp.PRODUCT_ID, fp.PRODUCT_NAME
ORDER BY TOTAL_SALES DESC, fp.PRODUCT_ID ASC

문제 풀이때 했던 생각.

테이블에서 생산일자가 2022년 5월인 식품들 분류
식품 ID, 식품 이름, 총매출을 조회
총매출을 기준으로 내림차순 정렬 식품 ID를 기준으로 오름차순

 

다음엔 이걸로 풀어보자

서브쿼리문으로 한번 풀어보자 (FROM, WHERE문으로 풀기 가능해보임)

 

 


 

 

+ Recent posts