CAR_RENTAL_COMPANY_CAR
테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
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 CAR_TYPE = '세단'
AND DATE_FORMAT(H.START_DATE, '%m') = '10'
ORDER BY CAR_ID DESC;
제출한 쿼리 :
SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
REST_INFO
테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
SELECT FOOD_TYPE
, REST_ID
, REST_NAME
, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN(
SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
)
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC;
참고 :
완전 동일한 유형의 문제
해설
다른 방법들 :ROW_NUMBER()와 PARTITION BY 사용하기
SELECT FOOD_TYPE , REST_ID , REST_NAME , FAVORITES FROM (SELECT FOOD_TYPE , REST_ID , REST_NAME , FAVORITES , ROW_NUMBER() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RNUM FROM REST_INFO) A WHERE RNUM = 1 ORDER BY FOOD_TYPE DESC;
ROW_NUMBER() 대신 RANK()도 사용 가능
WITH절 사용하기
WITH CTE AS ( SELECT FOOD_TYPE , MAX(FAVORITES) AS MAX_FAV FROM REST_INFO GROUP BY FOOD_TYPE ) SELECT A1.FOOD_TYPE , A1.REST_ID , A1.REST_NAME , A1.FAVORITES FROM REST_INFO A1 , CTE A2 WHERE A1.FOOD_TYPE = A2.FOOD_TYPE AND A1.FAVORITES = A2.MAX_FAV GROUP BY FOOD_TYPE ORDER BY FOOD_TYPE DESC;
WITH 절에 대한 설명
조인 사용하기
SELECT I1.FOOD_TYPE , I1.REST_ID , I1.REST_NAME , I1.FAVORITES FROM REST_INFO AS I1 LEFT JOIN REST_INFO I2 ON I1.FAVORITES < I2.FAVORITES AND I1.FOOD_TYPE = I2.FOOD_TYPE WHERE I2.REST_ID IS NULL ORDER BY I1.FOOD_TYPE DESC;
Alias를 활용하여 같은 테이블의 컬럼 조인이 가능하다.
FOOD_PRODUCT
테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
WITH CTE AS (
SELECT CATEGORY
, MAX(PRICE) AS "MAX_PRICE"
, PRODUCT_NAME AS "PRODUCT_NAME"
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
ORDER BY PRICE DESC
)
SELECT *
FROM CTE
GROUP BY CATEGORY
FOOD_PRODUCT
와 FOOD_ORDER
테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL문을 작성해주세요. 이때 결과는 총매출을 기준으로 내림차순 정렬해주시고 총매출이 같다면 식품 ID를 기준으로 오름차순 정렬해주세요.제출한 코드 :
SELECT P.PRODUCT_ID
, P.PRODUCT_NAME
, (P.PRICE * SUM(O.AMOUNT)) AS "TOTAL_SALES"
FROM FOOD_PRODUCT AS P
LEFT JOIN FOOD_ORDER AS O
ON P.PRODUCT_ID = O.PRODUCT_ID
WHERE O.PRODUCE_DATE LIKE "2022-05%"
GROUP BY P.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, P.PRODUCT_ID ASC;
오늘의 TMI
아무것도 안 했는데 벌써 5월이라는 사실에 매우 놀람 >~<