프로그래머스 SQL 고득점키트 - GROUP BY: 즐겨찾기가 가장 많은 식당 정보 출력하기(틀림)

르네·2023년 9월 15일
0

SQL

목록 보기
10/63

문제

나의 틀린 풀이

SELECT FOOD_TYPE, REST_ID, REST_NAME, COUNT(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)
ORDER BY FOOD_TYPE DESC

다른 사람 풀이

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
  • WHERE (FOOD_TYPE, FAVORITES) IN ...
    : 이 부분은 WHERE 절을 사용하여 검색 조건을 지정합니다. (FOOD_TYPE, FAVORITES) 쌍이 서브쿼리의 결과와 일치하는 행을 선택합니다.

  • (SELECT FOOD_TYPE, MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE)
    : 이 부분은 서브쿼리를 나타냅니다. REST_INFO 테이블에서 FOOD_TYPE로 그룹화한 후, 각 그룹 내에서 가장 큰 FAVORITES 값을 찾습니다. 이 서브쿼리의 결과는 (FOOD_TYPE, MAX(FAVORITES)) 쌍의 집합이 됩니다.

배운점

  • GROUP BY 후 맨 첫줄 SELECT줄에 MAX를 해버리면 최대값이 아니라 테이블 최상단 값들을 임의로 가져온다. -> 그러므로 서브쿼리 작성해서 풀어야 한다.

  • 서브쿼리를 쓰는 이유?
    -> 다중 행 비교
    : 서브쿼리를 사용하면 여러 행 중에서 가장 크거나 작은 값을 찾을 수 있습니다. 이 경우, 메인 쿼리에서는 서브쿼리의 결과와 여러 행을 비교하여 원하는 조건을 충족하는 행을 선택합니다.

  • (FOOD_TYPE, FAVORITES) 쌍이 서브쿼리의 결과와 일치하는 행을 선택하는 거니까. 'FOOD_TYPE, FAVORITES'이 소괄호로 하나의 행으로 묶여야한다. 안 그러면 오류남.

profile
데이터분석 공부로그

0개의 댓글