[SQL문제풀기] 즐겨찾기가 가장 많은 식당 정보 출력하기

silver's avatar
Jan 06, 2025
[SQL문제풀기] 즐겨찾기가 가장 많은 식당 정보 출력하기

문제

MYSQL, ORACLE

내가 작성한 오답

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES FROM REST_INFO WHERE REST_ID IN (SELECT REST_ID FROM REST_INFO GROUP BY FOOD_TYPE HAVING MAX(FAVORITES)) ORDER BY FOOD_TYPE DESC
💡
GROUP BY 문을 사용할 때, SELECT 절에 포함된 열 중에서 집계 함수로 처리되지 않은 열은 GROUP BY와 함께 사용된 열만 포함되어야 한다. 그렇지 않으면 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

다른 사람이 작성한 정답

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES FROM ( SELECT FOOD_TYPE, REST_ID, REST_NAME, SUM(FAVORITES) AS FAVORITES, RANK() OVER(PARTITION BY FOOD_TYPE ORDER BY SUM(FAVORITES) DESC) AS FAVORITES_RANK FROM REST_INFO GROUP BY FOOD_TYPE, REST_NAME ) a WHERE FAVORITES_RANK = 1 ORDER BY FOOD_TYPE DESC
 
💡
컬럼별 순위 부여 함수 RANK() OVER (PARTITION BY column1, column2 ORDER BY column3)
RANK(): 순위를 매기는 함수. 같은 값에 대해 같은 순위를 부여하고, 다음 순위는 건너뛰게 된다. 예를 들어, 1, 1, 3 순으로 순위를 매긴다.
PARTITION BY: 데이터를 여러 그룹으로 나누는 데 사용. 각 그룹 내에서 순위를 매긴다. 예를 들어, PARTITION BY department라고 하면 부서별로 순위를 매기게 된다.
ORDER BY: 각 그룹 내에서 순위를 매길 기준을 정의. 예를 들어, ORDER BY salary DESC라고 하면 급여가 높은 순서로 순위를 매긴다.
 
Share article

silver