학습일기 day24 - sql 다중 행 서브쿼리 문제풀기

이건구·2023년 9월 23일
0

프로그래머스에 올라와있는 SQL문제중 다중 행 서브쿼리를 사용한 문제풀기.

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

문제에 대한 정보는 프로그래머스에서 검색을하면 찾아볼수있다.

문제 : 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)
ORDER BY FOOD_TYPE DESC

REST_INFO라는 테이블에서 FOOD_TYPE, REST_ID, REST_NAME, FAVORITES을 FOOD_TYPE을 내림차순으로 정렬하여 보여주는 쿼리이다.

WHERE절을 보면 (FOOD_TYPE, FAVORITES) IN (SELECT FOOD_TYPE, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE) 라고 적혀있는데 IN 이후에있는 절이 서브쿼리이다.

서브쿼리만 보게된다면

SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE

REST_INFO 테이블에서 FOOD_TYPE 칼럼으로 GROUP BY 한뒤 FOOD_TYPE 와 MAX(FAVORITES) 를 보여준다.

이 서브쿼리를 IN() 을 사용하여 주쿼리의 WHERE절에 넣었다.

때문에 주쿼리의 FAVORITES는 서브쿼리에서 MAX로 정렬된 FAVORITES를 보여주게된다.

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

문제 : FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요. 이때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.

SELECT CATEGORY, 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 PRICE DESC

주 쿼리는 FOOD_PRODUCT 테이블에서 CATEGORY, PRICE, PRODUCT_NAME을 PRICE의 내림차순으로 정렬하여 보여주는 쿼리이다.

WHERE 절의 (SELECT) 부터는 서브쿼리로

SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY

CATEGORY 로 GROUP BY 한뒤 CATEGORY 에서 '과자', '국', '김치', '식용유' 들만 남도록 조건을 추가했다.

그리고 CATEGORY, MAX(PRICE)를 SELECT 함으로 써 가격이 가장 높은 행들만 선택했다.

그 서브쿼리를 주쿼리의 WHERE 절에 넣음으로 주쿼리의 CATEGORY와 PRICE는 서브쿼리의 CATEGORY와 PRICE를 가져오게되었다.

0개의 댓글