본문 바로가기
Algorithm/코딩테스트 (SQL)

[프로그래머스][GROUP BY] 즐겨찾기가 가장 많은 식당 정보 출력하기 (MySQL)

by 싱브이 2023. 12. 20.
728x90
반응형

문제

REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

 

 

 

 

내 생각

FOOD_TYPE으로 그룹화 하는 것 까지는 오케이,,  근데 답이 안나와서 검색해보니 서브쿼리 그게 뭔데..

1. 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회 : SELECT 절

2. REST_INFO 테이블에서 : FROM 절

3. 음식종류별로 즐겨찾기수가 가장 많은 식당
  이 부분에서 서브쿼리가 필요하다 !!!
  즉, WHERE 절에서 IN 으로 FOOD_TYPE별 즐겨찾기 수의 MAX인 식당을 뽑는다. 그리고 그 식당과 일치하는 식당을 조회한다. 

4. 음식 종류를 기준으로 내림차순 정렬 : ORDER BY

 

 

내 코드

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;

 

 

 

 

* 서브 쿼리 - 다중 조건

SELECT *
FROM 테이블명
WHERE (컬럼1, 컬럼2) IN (SELECT 서브쿼리_컬럼1, 서브쿼리_컬럼2 FROM 서브쿼리_테이블);

 

서브쿼리는 하나의 SQL 문에 포함되어 있는 또 다른 SQL 문이다 !

 

- 서브쿼리는 GORUP BY절을 제외하고 다 사용 가능

- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능

- 서브쿼리에서는 OEDER BY 사용 못.함.

- 괄호안에  포함되어야 함.

 

 

IN 연산자를 사용하면 서브 쿼리 결과에서 여러 행과 여러 칼럼을 동시에 비교할 수 있다.

(= 연산자는 단일 값 비교 !)

 

 

수행 순서 : FROM → WHERE → 서브쿼리 → SELECT

 

 

 

 

서브쿼리 쉽지 않아 ㅎ 더 해봐야 감이 잡히겠다

728x90
반응형

댓글